diff --git a/github-electron/github-electron-main-tests.ts b/github-electron/github-electron-main-tests.ts index 7e8c873928..1366a82022 100644 --- a/github-electron/github-electron-main-tests.ts +++ b/github-electron/github-electron-main-tests.ts @@ -412,7 +412,7 @@ var menuItem = new MenuItem({}); menuItem.label = 'Hello World!'; menuItem.click = (menuItem, browserWindow) => { - console.log('click', menuItem, browserWindow); + console.log('click', menuItem, browserWindow); }; // menu @@ -648,7 +648,7 @@ app.on('ready', () => { appIcon.setToolTip('This is my application.'); appIcon.setContextMenu(contextMenu); appIcon.setImage('/path/to/new/icon'); - appIcon.popUpContextMenu(contextMenu, {x: 100, y: 100}); + appIcon.popUpContextMenu(contextMenu, {x: 100, y: 100}); appIcon.on('click', (event, bounds) => { console.log('click', event, bounds); @@ -749,7 +749,7 @@ shell.openItem('/home/user/Desktop/test.txt'); shell.moveItemToTrash('/home/user/Desktop/test.txt'); shell.openExternal('https://github.com', { - activate: false + activate: false }); shell.beep(); @@ -779,7 +779,7 @@ session.defaultSession.cookies.get({ url : "http://www.github.com" }, (error, co var cookie = { url : "http://www.github.com", name : "dummy_name", value : "dummy" }; session.defaultSession.cookies.set(cookie, (error) => { if (error) { - console.error(error); + console.error(error); } }); @@ -819,3 +819,24 @@ session.defaultSession.enableNetworkEmulation({ session.defaultSession.setCertificateVerifyProc((hostname, cert, callback) => { callback((hostname === 'github.com') ? true : false); }); + +session.defaultSession.setPermissionRequestHandler(function(webContents, permission, callback) { + if (webContents.getURL() === 'github.com') { + if (permission == "notifications") { + callback(false); + return; + } + } + + callback(true); +}); + +// Modify the user agent for all requests to the following urls. +var filter = { + urls: ["https://*.github.com/*", "*://electron.github.io"] +}; + +session.defaultSession.webRequest.onBeforeSendHeaders(filter, function(details, callback) { + details.requestHeaders['User-Agent'] = "MyAgent"; + callback({cancel: false, requestHeaders: details.requestHeaders}); +}); diff --git a/github-electron/github-electron.d.ts b/github-electron/github-electron.d.ts index b435daa943..ec53909d50 100644 --- a/github-electron/github-electron.d.ts +++ b/github-electron/github-electron.d.ts @@ -1,4 +1,4 @@ -// Type definitions for Electron v0.37.4 +// Type definitions for Electron v0.37.6 // Project: http://electron.atom.io/ // Definitions by: jedmao , rhysd , Milan Burda // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped @@ -319,7 +319,7 @@ declare namespace Electron { * * Note: This will not affect process.argv. */ - appendArgument(value: any): void; + appendArgument(value: string): void; } interface Dock { @@ -448,7 +448,7 @@ declare namespace Electron { * Ask the server whether there is an update, you have to call setFeedURL * before using this API */ - checkForUpdates(): any; + checkForUpdates(): void; /** * Restarts the app and installs the update after it has been downloaded. * It should only be called after update-downloaded has been emitted. @@ -1132,6 +1132,11 @@ declare namespace Electron { * Default: ISO-8859-1. */ defaultEncoding?: string; + /** + * Whether to throttle animations and timers when the page becomes background. + * Default: true + */ + backgroundThrottling?: boolean; } interface BrowserWindowOptions extends Rectangle { @@ -1282,7 +1287,7 @@ declare namespace Electron { enableLargerThanScreen?: boolean; /** * Window’s background color as Hexadecimal value, like #66CD00 or #FFF or #80FFFFFF (alpha is supported). - * Default: #000 (black) for Linux and Windows, #FFF for Mac (or clear if transparent). + * Default: #FFF (white). */ backgroundColor?: string; /** @@ -1383,7 +1388,7 @@ declare namespace Electron { * Reads the data in the clipboard of the specified format. * Note: This API is experimental and could be removed in future. */ - read(format: string, type?: ClipboardType): any; + read(format: string, type?: ClipboardType): string | NativeImage; /** * Writes data to the clipboard. */ @@ -1410,7 +1415,7 @@ declare namespace Electron { * * @param callback Called once all child processes have acknowledged the getCategories request. */ - getCategories(callback: (categoryGroups: any[]) => void): void; + getCategories(callback: (categoryGroups: string[]) => void): void; /** * Start recording on all processes. Recording begins immediately locally and asynchronously * on child processes as soon as they receive the EnableRecording request. @@ -1574,7 +1579,7 @@ declare namespace Electron { * Note: There is no guarantee that the size of source.thumbnail is always * the same as the thumnbailSize in options. It also depends on the scale of the screen or window. */ - getSources(options: any, callback: (error: Error, sources: DesktopCapturerSource[]) => any): void; + getSources(options: DesktopCapturerOptions, callback: (error: Error, sources: DesktopCapturerSource[]) => any): void; } interface DesktopCapturerOptions { @@ -1649,13 +1654,13 @@ declare namespace Electron { * @param callback If supplied, the API call will be asynchronous. * @returns The index of the clicked button. */ - showMessageBox(browserWindow: BrowserWindow, options: ShowMessageBoxOptions, callback?: (response: any) => void): number; + showMessageBox(browserWindow: BrowserWindow, options: ShowMessageBoxOptions, callback?: (response: number) => void): number; /** * Shows a message box. It will block until the message box is closed. * @param callback If supplied, the API call will be asynchronous. * @returns The index of the clicked button. */ - showMessageBox(options: ShowMessageBoxOptions, callback?: (response: any) => void): number; + showMessageBox(options: ShowMessageBoxOptions, callback?: (response: number) => void): number; /** * Displays a modal dialog that shows an error message. * @@ -2160,7 +2165,7 @@ declare namespace Electron { /** * @returns {} The size of the image. */ - getSize(): any; + getSize(): Dimension; /** * Marks the image as template image. */ @@ -2506,7 +2511,7 @@ declare namespace Electron { /** * Resolves the proxy information for url. */ - resolveProxy(url: URL, callback: (proxy: any) => any): void; + resolveProxy(url: URL, callback: (proxy: string) => void): void; /** * Sets download saving directory. * By default, the download directory will be the Downloads under the respective app folder. @@ -2522,9 +2527,16 @@ declare namespace Electron { */ disableNetworkEmulation(): void; /** - * Sets the certificate verify proc for session. + * Sets the certificate verify proc for session, the proc will be called + * whenever a server certificate verification is requested. + * + * Calling setCertificateVerifyProc(null) will revert back to default certificate verify proc. */ - setCertificateVerifyProc(proc: CertificateVerifyProc): void; + setCertificateVerifyProc(proc: (hostname: string, cert: Certificate, callback: (accepted: boolean) => void) => void): void; + /** + * Sets the handler which can be used to respond to permission requests for the session. + */ + setPermissionRequestHandler(handler: (webContents: WebContents, permission: Permission, callback: (allow: boolean) => void) => void): void; /** * Clears the host resolver cache. */ @@ -2532,9 +2544,11 @@ declare namespace Electron { /** * The webRequest API set allows to intercept and modify contents of a request at various stages of its lifetime. */ - webRequest: any; + webRequest: WebRequest; } + type Permission = 'media' | 'geolocation' | 'notifications' | 'midiSysex' | 'pointerLock' | 'fullscreen'; + interface ClearStorageDataOptions { /** * Should follow window.location.origin’s representation scheme://host:port. @@ -2569,10 +2583,6 @@ declare namespace Electron { uploadThroughput?: number; } - interface CertificateVerifyProc { - (hostname: string, cert: any, callback: (accepted: boolean) => any): any; - } - interface CookieFilter { /** * Retrieves cookies which are associated with url. Empty implies retrieving cookies of all urls. @@ -2697,6 +2707,188 @@ declare namespace Electron { remove(url: string, name: string, callback: (error: Error) => void): void; } + /** + * Each API accepts an optional filter and a listener, the listener will be called when the API's event has happened. + * Passing null as listener will unsubscribe from the event. + * + * The filter will be used to filter out the requests that do not match the URL patterns. + * If the filter is omitted then all requests will be matched. + * + * For certain events the listener is passed with a callback, + * which should be called with an response object when listener has done its work. + */ + interface WebRequest { + /** + * The listener will be called when a request is about to occur. + */ + onBeforeRequest(listener: (details: WebRequest.BeforeRequestDetails, callback: WebRequest.BeforeRequestCallback) => void): void; + /** + * The listener will be called when a request is about to occur. + */ + onBeforeRequest(filter: WebRequest.Filter, listener: (details: WebRequest.BeforeRequestDetails, callback: WebRequest.BeforeRequestCallback) => void): void; + /** + * The listener will be called before sending an HTTP request, once the request headers are available. + * This may occur after a TCP connection is made to the server, but before any http data is sent. + */ + onBeforeSendHeaders(listener: (details: WebRequest.BeforeSendHeadersDetails, callback: WebRequest.BeforeSendHeadersCallback) => void): void; + /** + * The listener will be called before sending an HTTP request, once the request headers are available. + * This may occur after a TCP connection is made to the server, but before any http data is sent. + */ + onBeforeSendHeaders(filter: WebRequest.Filter, listener: (details: WebRequest.BeforeSendHeadersDetails, callback: WebRequest.BeforeSendHeadersCallback) => void): void; + /** + * The listener will be called just before a request is going to be sent to the server, + * modifications of previous onBeforeSendHeaders response are visible by the time this listener is fired. + */ + onSendHeaders(listener: (details: WebRequest.SendHeadersDetails) => void): void; + /** + * The listener will be called just before a request is going to be sent to the server, + * modifications of previous onBeforeSendHeaders response are visible by the time this listener is fired. + */ + onSendHeaders(filter: WebRequest.Filter, listener: (details: WebRequest.SendHeadersDetails) => void): void; + /** + * The listener will be called when HTTP response headers of a request have been received. + */ + onHeadersReceived(listener: (details: WebRequest.HeadersReceivedDetails, callback: WebRequest.HeadersReceivedCallback) => void): void; + /** + * The listener will be called when HTTP response headers of a request have been received. + */ + onHeadersReceived(filter: WebRequest.Filter, listener: (details: WebRequest.HeadersReceivedDetails, callback: WebRequest.HeadersReceivedCallback) => void): void; + /** + * The listener will be called when first byte of the response body is received. + * For HTTP requests, this means that the status line and response headers are available. + */ + onResponseStarted(listener: (details: WebRequest.ResponseStartedDetails) => void): void; + /** + * The listener will be called when first byte of the response body is received. + * For HTTP requests, this means that the status line and response headers are available. + */ + onResponseStarted(filter: WebRequest.Filter, listener: (details: WebRequest.ResponseStartedDetails) => void): void; + /** + * The listener will be called when a server initiated redirect is about to occur. + */ + onBeforeRedirect(listener: (details: WebRequest.BeforeRedirectDetails) => void): void; + /** + * The listener will be called when a server initiated redirect is about to occur. + */ + onBeforeRedirect(filter: WebRequest.Filter, listener: (details: WebRequest.BeforeRedirectDetails) => void): void; + /** + * The listener will be called when a request is completed. + */ + onCompleted(listener: (details: WebRequest.CompletedDetails) => void): void; + /** + * The listener will be called when a request is completed. + */ + onCompleted(filter: WebRequest.Filter, listener: (details: WebRequest.CompletedDetails) => void): void; + /** + * The listener will be called when an error occurs. + */ + onErrorOccurred(listener: (details: WebRequest.ErrorOccurredDetails) => void): void; + /** + * The listener will be called when an error occurs. + */ + onErrorOccurred(filter: WebRequest.Filter, listener: (details: WebRequest.ErrorOccurredDetails) => void): void; + } + + namespace WebRequest { + interface Filter { + urls: string[]; + } + + interface Details { + id: number; + url: string; + method: string; + resourceType: string; + timestamp: number; + } + + interface UploadData { + /** + * Content being sent. + */ + bytes: Buffer; + /** + * Path of file being uploaded. + */ + file: string; + } + + interface BeforeRequestDetails extends Details { + uploadData?: UploadData[]; + } + + type BeforeRequestCallback = (response: { + cancel?: boolean; + /** + * The original request is prevented from being sent or completed, and is instead redirected to the given URL. + */ + redirectURL?: string; + }) => void; + + interface BeforeSendHeadersDetails extends Details { + requestHeaders: Headers; + } + + type BeforeSendHeadersCallback = (response: { + cancel?: boolean; + /** + * When provided, request will be made with these headers. + */ + requestHeaders?: Headers; + }) => void; + + interface SendHeadersDetails extends Details { + requestHeaders: Headers; + } + + interface HeadersReceivedDetails extends Details { + statusLine: string; + statusCode: number; + responseHeaders: Headers; + } + + type HeadersReceivedCallback = (response: { + cancel?: boolean; + /** + * When provided, the server is assumed to have responded with these headers. + */ + responseHeaders?: Headers; + /** + * Should be provided when overriding responseHeaders to change header status + * otherwise original response header's status will be used. + */ + statusLine?: string; + }) => void; + + interface ResponseStartedDetails extends Details { + responseHeaders: Headers; + fromCache: boolean; + statusCode: number; + statusLine: string; + } + + interface BeforeRedirectDetails extends Details { + redirectURL: string; + statusCode: number; + ip?: string; + fromCache: boolean; + responseHeaders: Headers; + } + + interface CompletedDetails extends Details { + responseHeaders: Headers; + fromCache: boolean; + statusCode: number; + statusLine: string; + } + + interface ErrorOccurredDetails extends Details { + fromCache: boolean; + error: string; + } + } + // https://github.com/electron/electron/blob/master/docs/api/shell.md /** @@ -2870,7 +3062,7 @@ declare namespace Electron { * This event is like did-finish-load but emitted when the load failed or was cancelled, * e.g. window.stop() is invoked. */ - on(event: 'did-fail-load', listener: (event: Event, errorCode: number, errorDescription: string, validatedURL: string) => void): this; + on(event: 'did-fail-load', listener: (event: Event, errorCode: number, errorDescription: string, validatedURL: string, isMainFrame: boolean) => void): this; /** * Emitted when a frame has done navigation. */ @@ -2894,7 +3086,8 @@ declare namespace Electron { httpResponseCode: number, requestMethod: string, referrer: string, - headers: any + headers: Headers, + resourceType: string ) => void): this; /** * Emitted when a redirect is received while requesting a resource. @@ -2906,7 +3099,7 @@ declare namespace Electron { httpResponseCode: number, requestMethod: string, referrer: string, - headers: any + headers: Headers ) => void): this; /** * Emitted when the document in the given frame is loaded. @@ -3319,6 +3512,10 @@ declare namespace Electron { debugger: Debugger; } + interface Headers { + [key: string]: string; + } + type NewWindowDisposition = 'default' | 'foreground-tab' | 'background-tab' | 'new-window' | 'other'; /** @@ -3454,7 +3651,7 @@ declare namespace Electron { /** * Coordinates of first match region. */ - selectionArea?: any; + selectionArea?: Bounds; } interface DeviceEmulationParameters { @@ -3936,7 +4133,7 @@ declare namespace Electron { * Fired when details regarding a requested resource is available. * status indicates socket connection to download the resource. */ - addEventListener(type: 'did-get-response-details', listener: (event: WebViewElement.DidGetResponseRetails) => void, useCapture?: boolean): void; + addEventListener(type: 'did-get-response-details', listener: (event: WebViewElement.DidGetResponseDetails) => void, useCapture?: boolean): void; /** * Fired when a redirect was received while requesting a resource. */ @@ -4065,20 +4262,22 @@ declare namespace Electron { errorCode: number; errorDescription: string; validatedURL: string; + isMainFrame: boolean; } interface DidFrameFinishLoadEvent extends Event { isMainFrame: boolean; } - interface DidGetResponseRetails extends Event { + interface DidGetResponseDetails extends Event { status: boolean; newURL: string; originalURL: string; httpResponseCode: number; requestMethod: string; referrer: string; - headers: any; + headers: Headers; + resourceType: string; } interface DidGetRedirectRequestEvent extends Event { @@ -4088,7 +4287,7 @@ declare namespace Electron { httpResponseCode: number; requestMethod: string; referrer: string; - headers: any; + headers: Headers; } interface PageTitleUpdatedEvent extends Event {