From 12f0352abc5cb66403bc33ae1929b38a668a9808 Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Tue, 1 Sep 2020 12:48:48 +0900 Subject: [PATCH] chore: force source code and markdown files to use LF line ending (#25174) * chore: force source code and markdown files to use LF line ending * chore: replace CRLF with LF Co-authored-by: Cheng Zhao --- .gitattributes | 10 + docs/fiddles/menus/customize-menus/main.js | 720 +++++++++--------- .../fiddles/menus/customize-menus/renderer.js | 16 +- docs/fiddles/native-ui/drag-and-drop/main.js | 128 ++-- .../native-ui/drag-and-drop/renderer.js | 42 +- script/start-goma.ps1 | 20 +- shell/browser/electron_autofill_driver.cc | 130 ++-- shell/browser/electron_autofill_driver.h | 88 +-- .../electron_autofill_driver_factory.cc | 222 +++--- .../electron_autofill_driver_factory.h | 114 +-- 10 files changed, 750 insertions(+), 740 deletions(-) diff --git a/.gitattributes b/.gitattributes index 9d6933d53b98a..88189455c32c1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,3 +2,13 @@ # files to be checked out with LF endings even if core.autocrlf is true. *.patch text eol=lf patches/**/.patches merge=union + +# Source code and markdown files should always use LF as line ending. +*.cc text eol=lf +*.mm text eol=lf +*.h text eol=lf +*.js text eol=lf +*.ts text eol=lf +*.py text eol=lf +*.ps1 text eol=lf +*.md text eol=lf diff --git a/docs/fiddles/menus/customize-menus/main.js b/docs/fiddles/menus/customize-menus/main.js index 5036d82b64a3c..ad18f25f592ff 100644 --- a/docs/fiddles/menus/customize-menus/main.js +++ b/docs/fiddles/menus/customize-menus/main.js @@ -1,360 +1,360 @@ -// Modules to control application life and create native browser window -const { - BrowserWindow, - Menu, - MenuItem, - ipcMain, - app, - shell, - dialog -} = require('electron') - -const menu = new Menu() -menu.append(new MenuItem({ label: 'Hello' })) -menu.append(new MenuItem({ type: 'separator' })) -menu.append( - new MenuItem({ label: 'Electron', type: 'checkbox', checked: true }) -) - -const template = [ - { - label: 'Edit', - submenu: [ - { - label: 'Undo', - accelerator: 'CmdOrCtrl+Z', - role: 'undo' - }, - { - label: 'Redo', - accelerator: 'Shift+CmdOrCtrl+Z', - role: 'redo' - }, - { - type: 'separator' - }, - { - label: 'Cut', - accelerator: 'CmdOrCtrl+X', - role: 'cut' - }, - { - label: 'Copy', - accelerator: 'CmdOrCtrl+C', - role: 'copy' - }, - { - label: 'Paste', - accelerator: 'CmdOrCtrl+V', - role: 'paste' - }, - { - label: 'Select All', - accelerator: 'CmdOrCtrl+A', - role: 'selectall' - } - ] - }, - { - label: 'View', - submenu: [ - { - label: 'Reload', - accelerator: 'CmdOrCtrl+R', - click: (item, focusedWindow) => { - if (focusedWindow) { - // on reload, start fresh and close any old - // open secondary windows - if (focusedWindow.id === 1) { - BrowserWindow.getAllWindows().forEach(win => { - if (win.id > 1) win.close() - }) - } - focusedWindow.reload() - } - } - }, - { - label: 'Toggle Full Screen', - accelerator: (() => { - if (process.platform === 'darwin') { - return 'Ctrl+Command+F' - } else { - return 'F11' - } - })(), - click: (item, focusedWindow) => { - if (focusedWindow) { - focusedWindow.setFullScreen(!focusedWindow.isFullScreen()) - } - } - }, - { - label: 'Toggle Developer Tools', - accelerator: (() => { - if (process.platform === 'darwin') { - return 'Alt+Command+I' - } else { - return 'Ctrl+Shift+I' - } - })(), - click: (item, focusedWindow) => { - if (focusedWindow) { - focusedWindow.toggleDevTools() - } - } - }, - { - type: 'separator' - }, - { - label: 'App Menu Demo', - click: function (item, focusedWindow) { - if (focusedWindow) { - const options = { - type: 'info', - title: 'Application Menu Demo', - buttons: ['Ok'], - message: - 'This demo is for the Menu section, showing how to create a clickable menu item in the application menu.' - } - dialog.showMessageBox(focusedWindow, options, function () {}) - } - } - } - ] - }, - { - label: 'Window', - role: 'window', - submenu: [ - { - label: 'Minimize', - accelerator: 'CmdOrCtrl+M', - role: 'minimize' - }, - { - label: 'Close', - accelerator: 'CmdOrCtrl+W', - role: 'close' - }, - { - type: 'separator' - }, - { - label: 'Reopen Window', - accelerator: 'CmdOrCtrl+Shift+T', - enabled: false, - key: 'reopenMenuItem', - click: () => { - app.emit('activate') - } - } - ] - }, - { - label: 'Help', - role: 'help', - submenu: [ - { - label: 'Learn More', - click: () => { - shell.openExternal('http://electron.atom.io') - } - } - ] - } -] - -function addUpdateMenuItems (items, position) { - if (process.mas) return - - const version = app.getVersion() - const updateItems = [ - { - label: `Version ${version}`, - enabled: false - }, - { - label: 'Checking for Update', - enabled: false, - key: 'checkingForUpdate' - }, - { - label: 'Check for Update', - visible: false, - key: 'checkForUpdate', - click: () => { - require('electron').autoUpdater.checkForUpdates() - } - }, - { - label: 'Restart and Install Update', - enabled: true, - visible: false, - key: 'restartToUpdate', - click: () => { - require('electron').autoUpdater.quitAndInstall() - } - } - ] - - items.splice.apply(items, [position, 0].concat(updateItems)) -} - -function findReopenMenuItem () { - const menu = Menu.getApplicationMenu() - if (!menu) return - - let reopenMenuItem - menu.items.forEach(item => { - if (item.submenu) { - item.submenu.items.forEach(item => { - if (item.key === 'reopenMenuItem') { - reopenMenuItem = item - } - }) - } - }) - return reopenMenuItem -} - -if (process.platform === 'darwin') { - const name = app.getName() - template.unshift({ - label: name, - submenu: [ - { - label: `About ${name}`, - role: 'about' - }, - { - type: 'separator' - }, - { - label: 'Services', - role: 'services', - submenu: [] - }, - { - type: 'separator' - }, - { - label: `Hide ${name}`, - accelerator: 'Command+H', - role: 'hide' - }, - { - label: 'Hide Others', - accelerator: 'Command+Alt+H', - role: 'hideothers' - }, - { - label: 'Show All', - role: 'unhide' - }, - { - type: 'separator' - }, - { - label: 'Quit', - accelerator: 'Command+Q', - click: () => { - app.quit() - } - } - ] - }) - - // Window menu. - template[3].submenu.push( - { - type: 'separator' - }, - { - label: 'Bring All to Front', - role: 'front' - } - ) - - addUpdateMenuItems(template[0].submenu, 1) -} - -if (process.platform === 'win32') { - const helpMenu = template[template.length - 1].submenu - addUpdateMenuItems(helpMenu, 0) -} -// Keep a global reference of the window object, if you don't, the window will -// be closed automatically when the JavaScript object is garbage collected. -let mainWindow - -function createWindow () { - // Create the browser window. - mainWindow = new BrowserWindow({ - width: 800, - height: 600, - webPreferences: { - nodeIntegration: true - } - }) - - // and load the index.html of the app. - mainWindow.loadFile('index.html') - - // Open the DevTools. - // mainWindow.webContents.openDevTools() - - // Emitted when the window is closed. - mainWindow.on('closed', function () { - // Dereference the window object, usually you would store windows - // in an array if your app supports multi windows, this is the time - // when you should delete the corresponding element. - mainWindow = null - }) -} - -// This method will be called when Electron has finished -// initialization and is ready to create browser windows. -// Some APIs can only be used after this event occurs. -app.on('ready', () => { - createWindow() - const menu = Menu.buildFromTemplate(template) - Menu.setApplicationMenu(menu) -}) - -// Quit when all windows are closed. -app.on('window-all-closed', function () { - // On OS X it is common for applications and their menu bar - // to stay active until the user quits explicitly with Cmd + Q - const reopenMenuItem = findReopenMenuItem() - if (reopenMenuItem) reopenMenuItem.enabled = true - - if (process.platform !== 'darwin') { - app.quit() - } -}) - -app.on('activate', function () { - // On OS X it's common to re-create a window in the app when the - // dock icon is clicked and there are no other windows open. - if (mainWindow === null) { - createWindow() - } -}) - -app.on('browser-window-created', (event, win) => { - const reopenMenuItem = findReopenMenuItem() - if (reopenMenuItem) reopenMenuItem.enabled = false - - win.webContents.on('context-menu', (e, params) => { - menu.popup(win, params.x, params.y) - }) -}) - -ipcMain.on('show-context-menu', event => { - const win = BrowserWindow.fromWebContents(event.sender) - menu.popup(win) -}) - -// In this file you can include the rest of your app's specific main process -// code. You can also put them in separate files and require them here. +// Modules to control application life and create native browser window +const { + BrowserWindow, + Menu, + MenuItem, + ipcMain, + app, + shell, + dialog +} = require('electron') + +const menu = new Menu() +menu.append(new MenuItem({ label: 'Hello' })) +menu.append(new MenuItem({ type: 'separator' })) +menu.append( + new MenuItem({ label: 'Electron', type: 'checkbox', checked: true }) +) + +const template = [ + { + label: 'Edit', + submenu: [ + { + label: 'Undo', + accelerator: 'CmdOrCtrl+Z', + role: 'undo' + }, + { + label: 'Redo', + accelerator: 'Shift+CmdOrCtrl+Z', + role: 'redo' + }, + { + type: 'separator' + }, + { + label: 'Cut', + accelerator: 'CmdOrCtrl+X', + role: 'cut' + }, + { + label: 'Copy', + accelerator: 'CmdOrCtrl+C', + role: 'copy' + }, + { + label: 'Paste', + accelerator: 'CmdOrCtrl+V', + role: 'paste' + }, + { + label: 'Select All', + accelerator: 'CmdOrCtrl+A', + role: 'selectall' + } + ] + }, + { + label: 'View', + submenu: [ + { + label: 'Reload', + accelerator: 'CmdOrCtrl+R', + click: (item, focusedWindow) => { + if (focusedWindow) { + // on reload, start fresh and close any old + // open secondary windows + if (focusedWindow.id === 1) { + BrowserWindow.getAllWindows().forEach(win => { + if (win.id > 1) win.close() + }) + } + focusedWindow.reload() + } + } + }, + { + label: 'Toggle Full Screen', + accelerator: (() => { + if (process.platform === 'darwin') { + return 'Ctrl+Command+F' + } else { + return 'F11' + } + })(), + click: (item, focusedWindow) => { + if (focusedWindow) { + focusedWindow.setFullScreen(!focusedWindow.isFullScreen()) + } + } + }, + { + label: 'Toggle Developer Tools', + accelerator: (() => { + if (process.platform === 'darwin') { + return 'Alt+Command+I' + } else { + return 'Ctrl+Shift+I' + } + })(), + click: (item, focusedWindow) => { + if (focusedWindow) { + focusedWindow.toggleDevTools() + } + } + }, + { + type: 'separator' + }, + { + label: 'App Menu Demo', + click: function (item, focusedWindow) { + if (focusedWindow) { + const options = { + type: 'info', + title: 'Application Menu Demo', + buttons: ['Ok'], + message: + 'This demo is for the Menu section, showing how to create a clickable menu item in the application menu.' + } + dialog.showMessageBox(focusedWindow, options, function () {}) + } + } + } + ] + }, + { + label: 'Window', + role: 'window', + submenu: [ + { + label: 'Minimize', + accelerator: 'CmdOrCtrl+M', + role: 'minimize' + }, + { + label: 'Close', + accelerator: 'CmdOrCtrl+W', + role: 'close' + }, + { + type: 'separator' + }, + { + label: 'Reopen Window', + accelerator: 'CmdOrCtrl+Shift+T', + enabled: false, + key: 'reopenMenuItem', + click: () => { + app.emit('activate') + } + } + ] + }, + { + label: 'Help', + role: 'help', + submenu: [ + { + label: 'Learn More', + click: () => { + shell.openExternal('http://electron.atom.io') + } + } + ] + } +] + +function addUpdateMenuItems (items, position) { + if (process.mas) return + + const version = app.getVersion() + const updateItems = [ + { + label: `Version ${version}`, + enabled: false + }, + { + label: 'Checking for Update', + enabled: false, + key: 'checkingForUpdate' + }, + { + label: 'Check for Update', + visible: false, + key: 'checkForUpdate', + click: () => { + require('electron').autoUpdater.checkForUpdates() + } + }, + { + label: 'Restart and Install Update', + enabled: true, + visible: false, + key: 'restartToUpdate', + click: () => { + require('electron').autoUpdater.quitAndInstall() + } + } + ] + + items.splice.apply(items, [position, 0].concat(updateItems)) +} + +function findReopenMenuItem () { + const menu = Menu.getApplicationMenu() + if (!menu) return + + let reopenMenuItem + menu.items.forEach(item => { + if (item.submenu) { + item.submenu.items.forEach(item => { + if (item.key === 'reopenMenuItem') { + reopenMenuItem = item + } + }) + } + }) + return reopenMenuItem +} + +if (process.platform === 'darwin') { + const name = app.getName() + template.unshift({ + label: name, + submenu: [ + { + label: `About ${name}`, + role: 'about' + }, + { + type: 'separator' + }, + { + label: 'Services', + role: 'services', + submenu: [] + }, + { + type: 'separator' + }, + { + label: `Hide ${name}`, + accelerator: 'Command+H', + role: 'hide' + }, + { + label: 'Hide Others', + accelerator: 'Command+Alt+H', + role: 'hideothers' + }, + { + label: 'Show All', + role: 'unhide' + }, + { + type: 'separator' + }, + { + label: 'Quit', + accelerator: 'Command+Q', + click: () => { + app.quit() + } + } + ] + }) + + // Window menu. + template[3].submenu.push( + { + type: 'separator' + }, + { + label: 'Bring All to Front', + role: 'front' + } + ) + + addUpdateMenuItems(template[0].submenu, 1) +} + +if (process.platform === 'win32') { + const helpMenu = template[template.length - 1].submenu + addUpdateMenuItems(helpMenu, 0) +} +// Keep a global reference of the window object, if you don't, the window will +// be closed automatically when the JavaScript object is garbage collected. +let mainWindow + +function createWindow () { + // Create the browser window. + mainWindow = new BrowserWindow({ + width: 800, + height: 600, + webPreferences: { + nodeIntegration: true + } + }) + + // and load the index.html of the app. + mainWindow.loadFile('index.html') + + // Open the DevTools. + // mainWindow.webContents.openDevTools() + + // Emitted when the window is closed. + mainWindow.on('closed', function () { + // Dereference the window object, usually you would store windows + // in an array if your app supports multi windows, this is the time + // when you should delete the corresponding element. + mainWindow = null + }) +} + +// This method will be called when Electron has finished +// initialization and is ready to create browser windows. +// Some APIs can only be used after this event occurs. +app.on('ready', () => { + createWindow() + const menu = Menu.buildFromTemplate(template) + Menu.setApplicationMenu(menu) +}) + +// Quit when all windows are closed. +app.on('window-all-closed', function () { + // On OS X it is common for applications and their menu bar + // to stay active until the user quits explicitly with Cmd + Q + const reopenMenuItem = findReopenMenuItem() + if (reopenMenuItem) reopenMenuItem.enabled = true + + if (process.platform !== 'darwin') { + app.quit() + } +}) + +app.on('activate', function () { + // On OS X it's common to re-create a window in the app when the + // dock icon is clicked and there are no other windows open. + if (mainWindow === null) { + createWindow() + } +}) + +app.on('browser-window-created', (event, win) => { + const reopenMenuItem = findReopenMenuItem() + if (reopenMenuItem) reopenMenuItem.enabled = false + + win.webContents.on('context-menu', (e, params) => { + menu.popup(win, params.x, params.y) + }) +}) + +ipcMain.on('show-context-menu', event => { + const win = BrowserWindow.fromWebContents(event.sender) + menu.popup(win) +}) + +// In this file you can include the rest of your app's specific main process +// code. You can also put them in separate files and require them here. diff --git a/docs/fiddles/menus/customize-menus/renderer.js b/docs/fiddles/menus/customize-menus/renderer.js index f4d22843a0749..5527e1f20008d 100644 --- a/docs/fiddles/menus/customize-menus/renderer.js +++ b/docs/fiddles/menus/customize-menus/renderer.js @@ -1,8 +1,8 @@ -const { ipcRenderer } = require('electron') - -// Tell main process to show the menu when demo button is clicked -const contextMenuBtn = document.getElementById('context-menu') - -contextMenuBtn.addEventListener('click', () => { - ipcRenderer.send('show-context-menu') -}) +const { ipcRenderer } = require('electron') + +// Tell main process to show the menu when demo button is clicked +const contextMenuBtn = document.getElementById('context-menu') + +contextMenuBtn.addEventListener('click', () => { + ipcRenderer.send('show-context-menu') +}) diff --git a/docs/fiddles/native-ui/drag-and-drop/main.js b/docs/fiddles/native-ui/drag-and-drop/main.js index cd88fe2d5c84b..be3dcf9ec3d0c 100644 --- a/docs/fiddles/native-ui/drag-and-drop/main.js +++ b/docs/fiddles/native-ui/drag-and-drop/main.js @@ -1,64 +1,64 @@ -// Modules to control application life and create native browser window -const { app, BrowserWindow, ipcMain, nativeImage } = require('electron') -// Keep a global reference of the window object, if you don't, the window will -// be closed automatically when the JavaScript object is garbage collected. -let mainWindow - -function createWindow () { - // Create the browser window. - mainWindow = new BrowserWindow({ - width: 800, - height: 600, - webPreferences: { - nodeIntegration: true - } - }) - - // and load the index.html of the app. - mainWindow.loadFile('index.html') - - // Open the DevTools. - // mainWindow.webContents.openDevTools() - - // Emitted when the window is closed. - mainWindow.on('closed', function () { - // Dereference the window object, usually you would store windows - // in an array if your app supports multi windows, this is the time - // when you should delete the corresponding element. - mainWindow = null - }) -} - -// This method will be called when Electron has finished -// initialization and is ready to create browser windows. -// Some APIs can only be used after this event occurs. -app.on('ready', createWindow) - -// Quit when all windows are closed. -app.on('window-all-closed', function () { - // On OS X it is common for applications and their menu bar - // to stay active until the user quits explicitly with Cmd + Q - if (process.platform !== 'darwin') { - app.quit() - } -}) - -app.on('activate', function () { - // On OS X it's common to re-create a window in the app when the - // dock icon is clicked and there are no other windows open. - if (mainWindow === null) { - createWindow() - } -}) - -ipcMain.on('ondragstart', (event, filepath) => { - const icon = nativeImage.createFromDataURL('data:image/png;base64,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') - - event.sender.startDrag({ - file: filepath, - icon - }) -}) - -// In this file you can include the rest of your app's specific main process -// code. You can also put them in separate files and require them here. +// Modules to control application life and create native browser window +const { app, BrowserWindow, ipcMain, nativeImage } = require('electron') +// Keep a global reference of the window object, if you don't, the window will +// be closed automatically when the JavaScript object is garbage collected. +let mainWindow + +function createWindow () { + // Create the browser window. + mainWindow = new BrowserWindow({ + width: 800, + height: 600, + webPreferences: { + nodeIntegration: true + } + }) + + // and load the index.html of the app. + mainWindow.loadFile('index.html') + + // Open the DevTools. + // mainWindow.webContents.openDevTools() + + // Emitted when the window is closed. + mainWindow.on('closed', function () { + // Dereference the window object, usually you would store windows + // in an array if your app supports multi windows, this is the time + // when you should delete the corresponding element. + mainWindow = null + }) +} + +// This method will be called when Electron has finished +// initialization and is ready to create browser windows. +// Some APIs can only be used after this event occurs. +app.on('ready', createWindow) + +// Quit when all windows are closed. +app.on('window-all-closed', function () { + // On OS X it is common for applications and their menu bar + // to stay active until the user quits explicitly with Cmd + Q + if (process.platform !== 'darwin') { + app.quit() + } +}) + +app.on('activate', function () { + // On OS X it's common to re-create a window in the app when the + // dock icon is clicked and there are no other windows open. + if (mainWindow === null) { + createWindow() + } +}) + +ipcMain.on('ondragstart', (event, filepath) => { + const icon = nativeImage.createFromDataURL('data:image/png;base64,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') + + event.sender.startDrag({ + file: filepath, + icon + }) +}) + +// In this file you can include the rest of your app's specific main process +// code. You can also put them in separate files and require them here. diff --git a/docs/fiddles/native-ui/drag-and-drop/renderer.js b/docs/fiddles/native-ui/drag-and-drop/renderer.js index 3ede6cab4a72a..67f35d61ee1b7 100644 --- a/docs/fiddles/native-ui/drag-and-drop/renderer.js +++ b/docs/fiddles/native-ui/drag-and-drop/renderer.js @@ -1,21 +1,21 @@ -const { ipcRenderer } = require('electron') -const shell = require('electron').shell - -const links = document.querySelectorAll('a[href]') - -Array.prototype.forEach.call(links, (link) => { - const url = link.getAttribute('href') - if (url.indexOf('http') === 0) { - link.addEventListener('click', (e) => { - e.preventDefault() - shell.openExternal(url) - }) - } -}) - -const dragFileLink = document.getElementById('drag-file-link') - -dragFileLink.addEventListener('dragstart', event => { - event.preventDefault() - ipcRenderer.send('ondragstart', __filename) -}) +const { ipcRenderer } = require('electron') +const shell = require('electron').shell + +const links = document.querySelectorAll('a[href]') + +Array.prototype.forEach.call(links, (link) => { + const url = link.getAttribute('href') + if (url.indexOf('http') === 0) { + link.addEventListener('click', (e) => { + e.preventDefault() + shell.openExternal(url) + }) + } +}) + +const dragFileLink = document.getElementById('drag-file-link') + +dragFileLink.addEventListener('dragstart', event => { + event.preventDefault() + ipcRenderer.send('ondragstart', __filename) +}) diff --git a/script/start-goma.ps1 b/script/start-goma.ps1 index d53fc2965cd71..f63d46c7e0fc0 100755 --- a/script/start-goma.ps1 +++ b/script/start-goma.ps1 @@ -1,10 +1,10 @@ -param([string]$gomaDir=$PWD) -$cmdPath = Join-Path -Path $gomaDir -ChildPath "goma_ctl.py" -Start-Process -FilePath cmd -ArgumentList "/C", "python", "$cmdPath", "ensure_start" -$timedOut = $false; $waitTime = 0; $waitIncrement = 5; $timeout=120; -Do { sleep $waitIncrement; $timedOut = (($waitTime+=$waitIncrement) -gt $timeout); iex "$gomaDir\gomacc.exe port 2" > $null; } Until(($LASTEXITCODE -eq 0) -or $timedOut) -if ($timedOut) { - write-error 'Timed out waiting for goma to start'; exit 1; -} else { - Write-Output "Successfully started goma!" -} +param([string]$gomaDir=$PWD) +$cmdPath = Join-Path -Path $gomaDir -ChildPath "goma_ctl.py" +Start-Process -FilePath cmd -ArgumentList "/C", "python", "$cmdPath", "ensure_start" +$timedOut = $false; $waitTime = 0; $waitIncrement = 5; $timeout=120; +Do { sleep $waitIncrement; $timedOut = (($waitTime+=$waitIncrement) -gt $timeout); iex "$gomaDir\gomacc.exe port 2" > $null; } Until(($LASTEXITCODE -eq 0) -or $timedOut) +if ($timedOut) { + write-error 'Timed out waiting for goma to start'; exit 1; +} else { + Write-Output "Successfully started goma!" +} diff --git a/shell/browser/electron_autofill_driver.cc b/shell/browser/electron_autofill_driver.cc index 4567816ee3daf..8a960ae90baf1 100644 --- a/shell/browser/electron_autofill_driver.cc +++ b/shell/browser/electron_autofill_driver.cc @@ -1,65 +1,65 @@ -// Copyright (c) 2019 GitHub, Inc. -// Use of this source code is governed by the MIT license that can be -// found in the LICENSE file. - -#include "shell/browser/electron_autofill_driver.h" - -#include - -#include - -#include "content/public/browser/render_widget_host_view.h" -#include "shell/browser/api/electron_api_web_contents.h" -#include "shell/browser/native_window.h" - -namespace electron { - -AutofillDriver::AutofillDriver( - content::RenderFrameHost* render_frame_host, - mojom::ElectronAutofillDriverAssociatedRequest request) - : render_frame_host_(render_frame_host), binding_(this) { - autofill_popup_ = std::make_unique(); - binding_.Bind(std::move(request)); -} - -AutofillDriver::~AutofillDriver() = default; - -void AutofillDriver::ShowAutofillPopup( - const gfx::RectF& bounds, - const std::vector& values, - const std::vector& labels) { - auto* web_contents = - api::WebContents::From( - v8::Isolate::GetCurrent(), - content::WebContents::FromRenderFrameHost(render_frame_host_)) - .get(); - if (!web_contents || !web_contents->owner_window()) - return; - - auto* embedder = web_contents->embedder(); - - bool osr = - web_contents->IsOffScreen() || (embedder && embedder->IsOffScreen()); - gfx::RectF popup_bounds(bounds); - content::RenderFrameHost* embedder_frame_host = nullptr; - if (embedder) { - auto* embedder_view = embedder->web_contents()->GetMainFrame()->GetView(); - auto* view = web_contents->web_contents()->GetMainFrame()->GetView(); - auto offset = view->GetViewBounds().origin() - - embedder_view->GetViewBounds().origin(); - popup_bounds.Offset(offset); - embedder_frame_host = embedder->web_contents()->GetMainFrame(); - } - - autofill_popup_->CreateView(render_frame_host_, embedder_frame_host, osr, - web_contents->owner_window()->content_view(), - popup_bounds); - autofill_popup_->SetItems(values, labels); -} - -void AutofillDriver::HideAutofillPopup() { - if (autofill_popup_) - autofill_popup_->Hide(); -} - -} // namespace electron +// Copyright (c) 2019 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#include "shell/browser/electron_autofill_driver.h" + +#include + +#include + +#include "content/public/browser/render_widget_host_view.h" +#include "shell/browser/api/electron_api_web_contents.h" +#include "shell/browser/native_window.h" + +namespace electron { + +AutofillDriver::AutofillDriver( + content::RenderFrameHost* render_frame_host, + mojom::ElectronAutofillDriverAssociatedRequest request) + : render_frame_host_(render_frame_host), binding_(this) { + autofill_popup_ = std::make_unique(); + binding_.Bind(std::move(request)); +} + +AutofillDriver::~AutofillDriver() = default; + +void AutofillDriver::ShowAutofillPopup( + const gfx::RectF& bounds, + const std::vector& values, + const std::vector& labels) { + auto* web_contents = + api::WebContents::From( + v8::Isolate::GetCurrent(), + content::WebContents::FromRenderFrameHost(render_frame_host_)) + .get(); + if (!web_contents || !web_contents->owner_window()) + return; + + auto* embedder = web_contents->embedder(); + + bool osr = + web_contents->IsOffScreen() || (embedder && embedder->IsOffScreen()); + gfx::RectF popup_bounds(bounds); + content::RenderFrameHost* embedder_frame_host = nullptr; + if (embedder) { + auto* embedder_view = embedder->web_contents()->GetMainFrame()->GetView(); + auto* view = web_contents->web_contents()->GetMainFrame()->GetView(); + auto offset = view->GetViewBounds().origin() - + embedder_view->GetViewBounds().origin(); + popup_bounds.Offset(offset); + embedder_frame_host = embedder->web_contents()->GetMainFrame(); + } + + autofill_popup_->CreateView(render_frame_host_, embedder_frame_host, osr, + web_contents->owner_window()->content_view(), + popup_bounds); + autofill_popup_->SetItems(values, labels); +} + +void AutofillDriver::HideAutofillPopup() { + if (autofill_popup_) + autofill_popup_->Hide(); +} + +} // namespace electron diff --git a/shell/browser/electron_autofill_driver.h b/shell/browser/electron_autofill_driver.h index 8cf68b68bfd5e..98ba569b7d945 100644 --- a/shell/browser/electron_autofill_driver.h +++ b/shell/browser/electron_autofill_driver.h @@ -1,44 +1,44 @@ -// Copyright (c) 2019 GitHub, Inc. -// Use of this source code is governed by the MIT license that can be -// found in the LICENSE file. - -#ifndef SHELL_BROWSER_ELECTRON_AUTOFILL_DRIVER_H_ -#define SHELL_BROWSER_ELECTRON_AUTOFILL_DRIVER_H_ - -#include -#include - -#if defined(TOOLKIT_VIEWS) -#include "shell/browser/ui/autofill_popup.h" -#endif - -#include "mojo/public/cpp/bindings/associated_binding.h" -#include "shell/common/api/api.mojom.h" - -namespace electron { - -class AutofillDriver : public mojom::ElectronAutofillDriver { - public: - AutofillDriver(content::RenderFrameHost* render_frame_host, - mojom::ElectronAutofillDriverAssociatedRequest request); - - ~AutofillDriver() override; - - void ShowAutofillPopup(const gfx::RectF& bounds, - const std::vector& values, - const std::vector& labels) override; - void HideAutofillPopup() override; - - private: - content::RenderFrameHost* const render_frame_host_; - -#if defined(TOOLKIT_VIEWS) - std::unique_ptr autofill_popup_; -#endif - - mojo::AssociatedBinding binding_; -}; - -} // namespace electron - -#endif // SHELL_BROWSER_ELECTRON_AUTOFILL_DRIVER_H_ +// Copyright (c) 2019 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#ifndef SHELL_BROWSER_ELECTRON_AUTOFILL_DRIVER_H_ +#define SHELL_BROWSER_ELECTRON_AUTOFILL_DRIVER_H_ + +#include +#include + +#if defined(TOOLKIT_VIEWS) +#include "shell/browser/ui/autofill_popup.h" +#endif + +#include "mojo/public/cpp/bindings/associated_binding.h" +#include "shell/common/api/api.mojom.h" + +namespace electron { + +class AutofillDriver : public mojom::ElectronAutofillDriver { + public: + AutofillDriver(content::RenderFrameHost* render_frame_host, + mojom::ElectronAutofillDriverAssociatedRequest request); + + ~AutofillDriver() override; + + void ShowAutofillPopup(const gfx::RectF& bounds, + const std::vector& values, + const std::vector& labels) override; + void HideAutofillPopup() override; + + private: + content::RenderFrameHost* const render_frame_host_; + +#if defined(TOOLKIT_VIEWS) + std::unique_ptr autofill_popup_; +#endif + + mojo::AssociatedBinding binding_; +}; + +} // namespace electron + +#endif // SHELL_BROWSER_ELECTRON_AUTOFILL_DRIVER_H_ diff --git a/shell/browser/electron_autofill_driver_factory.cc b/shell/browser/electron_autofill_driver_factory.cc index 4e95cfb427894..ee8168ba64cd2 100644 --- a/shell/browser/electron_autofill_driver_factory.cc +++ b/shell/browser/electron_autofill_driver_factory.cc @@ -1,111 +1,111 @@ -// Copyright (c) 2019 GitHub, Inc. -// Use of this source code is governed by the MIT license that can be -// found in the LICENSE file. - -#include "shell/browser/electron_autofill_driver_factory.h" - -#include -#include -#include - -#include "base/bind.h" -#include "base/callback.h" -#include "content/public/browser/navigation_handle.h" -#include "content/public/browser/render_frame_host.h" -#include "content/public/browser/web_contents.h" -#include "shell/browser/electron_autofill_driver.h" - -namespace electron { - -namespace { - -std::unique_ptr CreateDriver( - content::RenderFrameHost* render_frame_host, - mojom::ElectronAutofillDriverAssociatedRequest request) { - return std::make_unique(render_frame_host, - std::move(request)); -} - -} // namespace - -AutofillDriverFactory::~AutofillDriverFactory() = default; - -// static -void AutofillDriverFactory::BindAutofillDriver( - mojom::ElectronAutofillDriverAssociatedRequest request, - content::RenderFrameHost* render_frame_host) { - content::WebContents* web_contents = - content::WebContents::FromRenderFrameHost(render_frame_host); - if (!web_contents) - return; - - AutofillDriverFactory* factory = - AutofillDriverFactory::FromWebContents(web_contents); - if (!factory) - return; - - AutofillDriver* driver = factory->DriverForFrame(render_frame_host); - if (!driver) - factory->AddDriverForFrame( - render_frame_host, - base::BindOnce(CreateDriver, render_frame_host, std::move(request))); -} - -AutofillDriverFactory::AutofillDriverFactory(content::WebContents* web_contents) - : content::WebContentsObserver(web_contents) { - const std::vector frames = - web_contents->GetAllFrames(); - for (content::RenderFrameHost* frame : frames) { - if (frame->IsRenderFrameLive()) - RenderFrameCreated(frame); - } -} - -void AutofillDriverFactory::RenderFrameDeleted( - content::RenderFrameHost* render_frame_host) { - DeleteDriverForFrame(render_frame_host); -} - -void AutofillDriverFactory::DidFinishNavigation( - content::NavigationHandle* navigation_handle) { - // For the purposes of this code, a navigation is not important if it has not - // committed yet or if it's in a subframe. - if (!navigation_handle->HasCommitted() || - !navigation_handle->IsInMainFrame()) { - return; - } - - CloseAllPopups(); -} - -AutofillDriver* AutofillDriverFactory::DriverForFrame( - content::RenderFrameHost* render_frame_host) { - auto mapping = driver_map_.find(render_frame_host); - return mapping == driver_map_.end() ? nullptr : mapping->second.get(); -} - -void AutofillDriverFactory::AddDriverForFrame( - content::RenderFrameHost* render_frame_host, - CreationCallback factory_method) { - auto insertion_result = - driver_map_.insert(std::make_pair(render_frame_host, nullptr)); - // This can be called twice for the key representing the main frame. - if (insertion_result.second) { - insertion_result.first->second = std::move(factory_method).Run(); - } -} - -void AutofillDriverFactory::DeleteDriverForFrame( - content::RenderFrameHost* render_frame_host) { - driver_map_.erase(render_frame_host); -} - -void AutofillDriverFactory::CloseAllPopups() { - for (auto& it : driver_map_) { - it.second->HideAutofillPopup(); - } -} - -WEB_CONTENTS_USER_DATA_KEY_IMPL(AutofillDriverFactory) - -} // namespace electron +// Copyright (c) 2019 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#include "shell/browser/electron_autofill_driver_factory.h" + +#include +#include +#include + +#include "base/bind.h" +#include "base/callback.h" +#include "content/public/browser/navigation_handle.h" +#include "content/public/browser/render_frame_host.h" +#include "content/public/browser/web_contents.h" +#include "shell/browser/electron_autofill_driver.h" + +namespace electron { + +namespace { + +std::unique_ptr CreateDriver( + content::RenderFrameHost* render_frame_host, + mojom::ElectronAutofillDriverAssociatedRequest request) { + return std::make_unique(render_frame_host, + std::move(request)); +} + +} // namespace + +AutofillDriverFactory::~AutofillDriverFactory() = default; + +// static +void AutofillDriverFactory::BindAutofillDriver( + mojom::ElectronAutofillDriverAssociatedRequest request, + content::RenderFrameHost* render_frame_host) { + content::WebContents* web_contents = + content::WebContents::FromRenderFrameHost(render_frame_host); + if (!web_contents) + return; + + AutofillDriverFactory* factory = + AutofillDriverFactory::FromWebContents(web_contents); + if (!factory) + return; + + AutofillDriver* driver = factory->DriverForFrame(render_frame_host); + if (!driver) + factory->AddDriverForFrame( + render_frame_host, + base::BindOnce(CreateDriver, render_frame_host, std::move(request))); +} + +AutofillDriverFactory::AutofillDriverFactory(content::WebContents* web_contents) + : content::WebContentsObserver(web_contents) { + const std::vector frames = + web_contents->GetAllFrames(); + for (content::RenderFrameHost* frame : frames) { + if (frame->IsRenderFrameLive()) + RenderFrameCreated(frame); + } +} + +void AutofillDriverFactory::RenderFrameDeleted( + content::RenderFrameHost* render_frame_host) { + DeleteDriverForFrame(render_frame_host); +} + +void AutofillDriverFactory::DidFinishNavigation( + content::NavigationHandle* navigation_handle) { + // For the purposes of this code, a navigation is not important if it has not + // committed yet or if it's in a subframe. + if (!navigation_handle->HasCommitted() || + !navigation_handle->IsInMainFrame()) { + return; + } + + CloseAllPopups(); +} + +AutofillDriver* AutofillDriverFactory::DriverForFrame( + content::RenderFrameHost* render_frame_host) { + auto mapping = driver_map_.find(render_frame_host); + return mapping == driver_map_.end() ? nullptr : mapping->second.get(); +} + +void AutofillDriverFactory::AddDriverForFrame( + content::RenderFrameHost* render_frame_host, + CreationCallback factory_method) { + auto insertion_result = + driver_map_.insert(std::make_pair(render_frame_host, nullptr)); + // This can be called twice for the key representing the main frame. + if (insertion_result.second) { + insertion_result.first->second = std::move(factory_method).Run(); + } +} + +void AutofillDriverFactory::DeleteDriverForFrame( + content::RenderFrameHost* render_frame_host) { + driver_map_.erase(render_frame_host); +} + +void AutofillDriverFactory::CloseAllPopups() { + for (auto& it : driver_map_) { + it.second->HideAutofillPopup(); + } +} + +WEB_CONTENTS_USER_DATA_KEY_IMPL(AutofillDriverFactory) + +} // namespace electron diff --git a/shell/browser/electron_autofill_driver_factory.h b/shell/browser/electron_autofill_driver_factory.h index 23784fc9ec1e9..359387f6040ac 100644 --- a/shell/browser/electron_autofill_driver_factory.h +++ b/shell/browser/electron_autofill_driver_factory.h @@ -1,57 +1,57 @@ -// Copyright (c) 2019 GitHub, Inc. -// Use of this source code is governed by the MIT license that can be -// found in the LICENSE file. - -#ifndef SHELL_BROWSER_ELECTRON_AUTOFILL_DRIVER_FACTORY_H_ -#define SHELL_BROWSER_ELECTRON_AUTOFILL_DRIVER_FACTORY_H_ - -#include -#include - -#include "base/callback_forward.h" -#include "content/public/browser/web_contents_observer.h" -#include "content/public/browser/web_contents_user_data.h" -#include "shell/common/api/api.mojom.h" - -namespace electron { - -class AutofillDriver; - -class AutofillDriverFactory - : public content::WebContentsObserver, - public content::WebContentsUserData { - public: - typedef base::OnceCallback()> - CreationCallback; - - ~AutofillDriverFactory() override; - - static void BindAutofillDriver( - mojom::ElectronAutofillDriverAssociatedRequest request, - content::RenderFrameHost* render_frame_host); - - // content::WebContentsObserver: - void RenderFrameDeleted(content::RenderFrameHost* render_frame_host) override; - void DidFinishNavigation( - content::NavigationHandle* navigation_handle) override; - - AutofillDriver* DriverForFrame(content::RenderFrameHost* render_frame_host); - void AddDriverForFrame(content::RenderFrameHost* render_frame_host, - CreationCallback factory_method); - void DeleteDriverForFrame(content::RenderFrameHost* render_frame_host); - - void CloseAllPopups(); - - WEB_CONTENTS_USER_DATA_KEY_DECL(); - - private: - explicit AutofillDriverFactory(content::WebContents* web_contents); - friend class content::WebContentsUserData; - - std::unordered_map> - driver_map_; -}; - -} // namespace electron - -#endif // SHELL_BROWSER_ELECTRON_AUTOFILL_DRIVER_FACTORY_H_ +// Copyright (c) 2019 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#ifndef SHELL_BROWSER_ELECTRON_AUTOFILL_DRIVER_FACTORY_H_ +#define SHELL_BROWSER_ELECTRON_AUTOFILL_DRIVER_FACTORY_H_ + +#include +#include + +#include "base/callback_forward.h" +#include "content/public/browser/web_contents_observer.h" +#include "content/public/browser/web_contents_user_data.h" +#include "shell/common/api/api.mojom.h" + +namespace electron { + +class AutofillDriver; + +class AutofillDriverFactory + : public content::WebContentsObserver, + public content::WebContentsUserData { + public: + typedef base::OnceCallback()> + CreationCallback; + + ~AutofillDriverFactory() override; + + static void BindAutofillDriver( + mojom::ElectronAutofillDriverAssociatedRequest request, + content::RenderFrameHost* render_frame_host); + + // content::WebContentsObserver: + void RenderFrameDeleted(content::RenderFrameHost* render_frame_host) override; + void DidFinishNavigation( + content::NavigationHandle* navigation_handle) override; + + AutofillDriver* DriverForFrame(content::RenderFrameHost* render_frame_host); + void AddDriverForFrame(content::RenderFrameHost* render_frame_host, + CreationCallback factory_method); + void DeleteDriverForFrame(content::RenderFrameHost* render_frame_host); + + void CloseAllPopups(); + + WEB_CONTENTS_USER_DATA_KEY_DECL(); + + private: + explicit AutofillDriverFactory(content::WebContents* web_contents); + friend class content::WebContentsUserData; + + std::unordered_map> + driver_map_; +}; + +} // namespace electron + +#endif // SHELL_BROWSER_ELECTRON_AUTOFILL_DRIVER_FACTORY_H_