From 795447f61ab0c286f35e44204d5e94ca4a2461f7 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Wed, 10 Jan 2018 17:07:56 +1100 Subject: [PATCH 01/10] Implement dialog (alert/confirm) blocking as a user switch after the first dialog * This is to enable more browser-like behavior so that users who run third-party code will not be DOS'ed with alerts and confirms. This is already handled like this in most major browsers so this will greatly help these developers --- .../browser/atom_javascript_dialog_manager.cc | 28 ++++++++++++++-- atom/browser/atom_javascript_dialog_manager.h | 4 +++ atom/browser/web_contents_preferences.cc | 9 +++++ atom/browser/web_contents_preferences.h | 4 +++ docs/api/browser-window.md | 4 +++ lib/browser/rpc-server.js | 33 ------------------- lib/renderer/window-setup.js | 8 ----- 7 files changed, 47 insertions(+), 43 deletions(-) diff --git a/atom/browser/atom_javascript_dialog_manager.cc b/atom/browser/atom_javascript_dialog_manager.cc index c593b2bfba..c209e70001 100644 --- a/atom/browser/atom_javascript_dialog_manager.cc +++ b/atom/browser/atom_javascript_dialog_manager.cc @@ -10,6 +10,7 @@ #include "atom/browser/api/atom_api_web_contents.h" #include "atom/browser/native_window.h" #include "atom/browser/ui/message_box.h" +#include "atom/browser/web_contents_preferences.h" #include "base/bind.h" #include "base/strings/utf_string_conversions.h" #include "ui/gfx/image/image_skia.h" @@ -30,6 +31,13 @@ void AtomJavaScriptDialogManager::RunJavaScriptDialog( const base::string16& default_prompt_text, const DialogClosedCallback& callback, bool* did_suppress_message) { + const std::string origin = origin_url.GetOrigin().spec(); + if (origin_counts_.find(origin) == origin_counts_.end()) { + origin_counts_[origin] = 0; + } + + if (origin_counts_[origin] == -1) return callback.Run(false, base::string16());; + if (dialog_type != JavaScriptDialogType::JAVASCRIPT_DIALOG_TYPE_ALERT && dialog_type != JavaScriptDialogType::JAVASCRIPT_DIALOG_TYPE_CONFIRM) { callback.Run(false, base::string16()); @@ -41,12 +49,23 @@ void AtomJavaScriptDialogManager::RunJavaScriptDialog( buttons.push_back("Cancel"); } + origin_counts_[origin]++; + + std::string checkbox_string; + if (origin_counts_[origin] > 1 && + WebContentsPreferences::IsPreferenceEnabled("safeDialogs", web_contents)) { + if (!WebContentsPreferences::GetString("safeDialogsMessage", + &checkbox_string, web_contents)) { + checkbox_string = "Prevent this app from creating additional dialogs"; + } + } atom::ShowMessageBox(NativeWindow::FromWebContents(web_contents), atom::MessageBoxType::MESSAGE_BOX_TYPE_NONE, buttons, -1, 0, atom::MessageBoxOptions::MESSAGE_BOX_NONE, "", - base::UTF16ToUTF8(message_text), "", "", false, + base::UTF16ToUTF8(message_text), "", checkbox_string, false, gfx::ImageSkia(), - base::Bind(&OnMessageBoxCallback, callback)); + base::Bind(&OnMessageBoxCallback, callback, origin, + &origin_counts_)); } void AtomJavaScriptDialogManager::RunBeforeUnloadDialog( @@ -66,8 +85,13 @@ void AtomJavaScriptDialogManager::CancelDialogs( // static void AtomJavaScriptDialogManager::OnMessageBoxCallback( const DialogClosedCallback& callback, + const std::string& origin, + std::map* origin_counts_, int code, bool checkbox_checked) { + if (checkbox_checked) { + (*origin_counts_)[origin] = -1; + } callback.Run(code == 0, base::string16()); } diff --git a/atom/browser/atom_javascript_dialog_manager.h b/atom/browser/atom_javascript_dialog_manager.h index d5e6c54336..b2af83d4cf 100644 --- a/atom/browser/atom_javascript_dialog_manager.h +++ b/atom/browser/atom_javascript_dialog_manager.h @@ -6,6 +6,7 @@ #define ATOM_BROWSER_ATOM_JAVASCRIPT_DIALOG_MANAGER_H_ #include +#include #include "content/public/browser/javascript_dialog_manager.h" @@ -37,9 +38,12 @@ class AtomJavaScriptDialogManager : public content::JavaScriptDialogManager { private: static void OnMessageBoxCallback(const DialogClosedCallback& callback, + const std::string& origin, + std::map* origins_, int code, bool checkbox_checked); api::WebContents* api_web_contents_; + std::map origin_counts_; }; } // namespace atom diff --git a/atom/browser/web_contents_preferences.cc b/atom/browser/web_contents_preferences.cc index 2cbf07be86..932da8f4a8 100644 --- a/atom/browser/web_contents_preferences.cc +++ b/atom/browser/web_contents_preferences.cc @@ -301,4 +301,13 @@ bool WebContentsPreferences::GetInteger(const std::string& attributeName, return false; } +bool WebContentsPreferences::GetString(const std::string& attributeName, + std::string* stringValue, + content::WebContents* web_contents) { + WebContentsPreferences* self = FromWebContents(web_contents); + if (!self) + return false; + return self->web_preferences()->GetString(attributeName, stringValue); +} + } // namespace atom diff --git a/atom/browser/web_contents_preferences.h b/atom/browser/web_contents_preferences.h index 94dd8dc598..299c088174 100644 --- a/atom/browser/web_contents_preferences.h +++ b/atom/browser/web_contents_preferences.h @@ -40,6 +40,10 @@ class WebContentsPreferences static bool IsPreferenceEnabled(const std::string& attribute_name, content::WebContents* web_contents); + static bool GetString(const std::string& attributeName, + std::string* stringValue, + content::WebContents* web_contents); + // Modify the WebPreferences according to |web_contents|'s preferences. static void OverrideWebkitPrefs( content::WebContents* web_contents, content::WebPreferences* prefs); diff --git a/docs/api/browser-window.md b/docs/api/browser-window.md index 2be2da5976..e739a659e4 100644 --- a/docs/api/browser-window.md +++ b/docs/api/browser-window.md @@ -362,6 +362,10 @@ It creates a new `BrowserWindow` with native properties as set by the `options`. * `additionArguments` String[] (optional) - A list of strings that will be appended to `process.argv` in the renderer process of this app. Useful for passing small bits of data down to renderer process preload scripts. + * `safeDialogs` Boolean (optional) - Whether to enable browser style + consecutive dialog protection. + * `safeDialogsMessage` String (optional) - The message to display when consecutive + dialog protection is triggered. When setting minimum or maximum window size with `minWidth`/`maxWidth`/ `minHeight`/`maxHeight`, it only constrains the users. It won't prevent you from diff --git a/lib/browser/rpc-server.js b/lib/browser/rpc-server.js index c0cd09dea4..633360db1e 100644 --- a/lib/browser/rpc-server.js +++ b/lib/browser/rpc-server.js @@ -438,39 +438,6 @@ ipcMain.on('ELECTRON_BROWSER_SEND_TO', function (event, sendToAll, webContentsId } }) -// Implements window.alert(message, title) -ipcMain.on('ELECTRON_BROWSER_WINDOW_ALERT', function (event, message, title) { - if (message == null) message = '' - if (title == null) title = '' - - const dialogProperties = { - message: `${message}`, - title: `${title}`, - buttons: ['OK'] - } - event.returnValue = event.sender.isOffscreen() - ? electron.dialog.showMessageBox(dialogProperties) - : electron.dialog.showMessageBox( - event.sender.getOwnerBrowserWindow(), dialogProperties) -}) - -// Implements window.confirm(message, title) -ipcMain.on('ELECTRON_BROWSER_WINDOW_CONFIRM', function (event, message, title) { - if (message == null) message = '' - if (title == null) title = '' - - const dialogProperties = { - message: `${message}`, - title: `${title}`, - buttons: ['OK', 'Cancel'], - cancelId: 1 - } - event.returnValue = !(event.sender.isOffscreen() - ? electron.dialog.showMessageBox(dialogProperties) - : electron.dialog.showMessageBox( - event.sender.getOwnerBrowserWindow(), dialogProperties)) -}) - // Implements window.close() ipcMain.on('ELECTRON_BROWSER_WINDOW_CLOSE', function (event) { const window = event.sender.getOwnerBrowserWindow() diff --git a/lib/renderer/window-setup.js b/lib/renderer/window-setup.js index b94eace5ae..ac329b4307 100644 --- a/lib/renderer/window-setup.js +++ b/lib/renderer/window-setup.js @@ -133,14 +133,6 @@ module.exports = (ipcRenderer, guestInstanceId, openerId, hiddenPage, usesNative } } - window.alert = function (message, title) { - ipcRenderer.sendSync('ELECTRON_BROWSER_WINDOW_ALERT', toString(message), toString(title)) - } - - window.confirm = function (message, title) { - return ipcRenderer.sendSync('ELECTRON_BROWSER_WINDOW_CONFIRM', toString(message), toString(title)) - } - // But we do not support prompt(). window.prompt = function () { throw new Error('prompt() is and will not be supported.') From 2435ffaf096d83d6e441d660b46f4980f202ed31 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 24 Jan 2018 20:45:21 -0600 Subject: [PATCH 02/10] fix cpplint error atom/browser/atom_javascript_dialog_manager.h:9: Include "map" not in alphabetical order [build/include_alpha] [4] --- atom/browser/atom_javascript_dialog_manager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atom/browser/atom_javascript_dialog_manager.h b/atom/browser/atom_javascript_dialog_manager.h index b2af83d4cf..8a584218ab 100644 --- a/atom/browser/atom_javascript_dialog_manager.h +++ b/atom/browser/atom_javascript_dialog_manager.h @@ -5,8 +5,8 @@ #ifndef ATOM_BROWSER_ATOM_JAVASCRIPT_DIALOG_MANAGER_H_ #define ATOM_BROWSER_ATOM_JAVASCRIPT_DIALOG_MANAGER_H_ -#include #include +#include #include "content/public/browser/javascript_dialog_manager.h" From a5a068b2eedd161be98e4e75c8ff6789c9a01833 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 24 Jan 2018 20:50:00 -0600 Subject: [PATCH 03/10] fix cpplint errors atom/browser/atom_javascript_dialog_manager.cc:39: Lines should be <= 80 characters long [whitespace/line_length] [2] atom/browser/atom_javascript_dialog_manager.cc:39: If/else bodies with multiple statements require braces [readability/braces] [4] atom/browser/atom_javascript_dialog_manager.cc:62: Lines should be <= 80 characters long [whitespace/line_length] [2] atom/browser/atom_javascript_dialog_manager.cc:89: If/else bodies with multiple statements require braces [readability/braces] [4] --- atom/browser/atom_javascript_dialog_manager.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/atom/browser/atom_javascript_dialog_manager.cc b/atom/browser/atom_javascript_dialog_manager.cc index c209e70001..f29a3d9926 100644 --- a/atom/browser/atom_javascript_dialog_manager.cc +++ b/atom/browser/atom_javascript_dialog_manager.cc @@ -36,7 +36,9 @@ void AtomJavaScriptDialogManager::RunJavaScriptDialog( origin_counts_[origin] = 0; } - if (origin_counts_[origin] == -1) return callback.Run(false, base::string16());; + if (origin_counts_[origin] == -1) { + return callback.Run(false, base::string16()); + } if (dialog_type != JavaScriptDialogType::JAVASCRIPT_DIALOG_TYPE_ALERT && dialog_type != JavaScriptDialogType::JAVASCRIPT_DIALOG_TYPE_CONFIRM) { @@ -62,8 +64,8 @@ void AtomJavaScriptDialogManager::RunJavaScriptDialog( atom::ShowMessageBox(NativeWindow::FromWebContents(web_contents), atom::MessageBoxType::MESSAGE_BOX_TYPE_NONE, buttons, -1, 0, atom::MessageBoxOptions::MESSAGE_BOX_NONE, "", - base::UTF16ToUTF8(message_text), "", checkbox_string, false, - gfx::ImageSkia(), + base::UTF16ToUTF8(message_text), "", checkbox_string, + false, gfx::ImageSkia(), base::Bind(&OnMessageBoxCallback, callback, origin, &origin_counts_)); } From 731240e0e949c67bbb3175907bbc8f813530760b Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Thu, 15 Feb 2018 13:07:49 +1100 Subject: [PATCH 04/10] Use USER_WANTS_NO_MORE_DIALOGS constant for -1 magic number --- atom/browser/atom_javascript_dialog_manager.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/atom/browser/atom_javascript_dialog_manager.cc b/atom/browser/atom_javascript_dialog_manager.cc index f29a3d9926..219b297314 100644 --- a/atom/browser/atom_javascript_dialog_manager.cc +++ b/atom/browser/atom_javascript_dialog_manager.cc @@ -17,6 +17,10 @@ using content::JavaScriptDialogType; +namespace { + constexpr int USER_WANTS_NO_MORE_DIALOGS = -1; +} + namespace atom { AtomJavaScriptDialogManager::AtomJavaScriptDialogManager( @@ -36,7 +40,7 @@ void AtomJavaScriptDialogManager::RunJavaScriptDialog( origin_counts_[origin] = 0; } - if (origin_counts_[origin] == -1) { + if (origin_counts_[origin] == USER_WANTS_NO_MORE_DIALOGS) { return callback.Run(false, base::string16()); } @@ -92,7 +96,7 @@ void AtomJavaScriptDialogManager::OnMessageBoxCallback( int code, bool checkbox_checked) { if (checkbox_checked) { - (*origin_counts_)[origin] = -1; + (*origin_counts_)[origin] = USER_WANTS_NO_MORE_DIALOGS; } callback.Run(code == 0, base::string16()); } From 7dec3c9320705a8dd14f137f9aa2f5f3f337f135 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Thu, 15 Feb 2018 14:06:49 +1100 Subject: [PATCH 05/10] Fixup cpplint --- atom/browser/atom_javascript_dialog_manager.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/atom/browser/atom_javascript_dialog_manager.cc b/atom/browser/atom_javascript_dialog_manager.cc index 219b297314..5c95b02288 100644 --- a/atom/browser/atom_javascript_dialog_manager.cc +++ b/atom/browser/atom_javascript_dialog_manager.cc @@ -59,7 +59,8 @@ void AtomJavaScriptDialogManager::RunJavaScriptDialog( std::string checkbox_string; if (origin_counts_[origin] > 1 && - WebContentsPreferences::IsPreferenceEnabled("safeDialogs", web_contents)) { + WebContentsPreferences::IsPreferenceEnabled("safeDialogs", + web_contents)) { if (!WebContentsPreferences::GetString("safeDialogsMessage", &checkbox_string, web_contents)) { checkbox_string = "Prevent this app from creating additional dialogs"; From 26a071ea004ebed816260b8f50ace1ff88cb0ee3 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 6 Mar 2018 11:21:40 +0900 Subject: [PATCH 06/10] docs: Defaults of safeDialogs --- docs/api/browser-window.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/api/browser-window.md b/docs/api/browser-window.md index e739a659e4..299edea773 100644 --- a/docs/api/browser-window.md +++ b/docs/api/browser-window.md @@ -363,9 +363,9 @@ It creates a new `BrowserWindow` with native properties as set by the `options`. to `process.argv` in the renderer process of this app. Useful for passing small bits of data down to renderer process preload scripts. * `safeDialogs` Boolean (optional) - Whether to enable browser style - consecutive dialog protection. + consecutive dialog protection. Default is `false`. * `safeDialogsMessage` String (optional) - The message to display when consecutive - dialog protection is triggered. + dialog protection is triggered. Default is empty string. When setting minimum or maximum window size with `minWidth`/`maxWidth`/ `minHeight`/`maxHeight`, it only constrains the users. It won't prevent you from From d8f16f4116eaf17e97b35a928fe7894288f2b5a1 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 6 Mar 2018 11:24:42 +0900 Subject: [PATCH 07/10] docs: Default message is not localized --- docs/api/browser-window.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/api/browser-window.md b/docs/api/browser-window.md index 299edea773..e0d46834b6 100644 --- a/docs/api/browser-window.md +++ b/docs/api/browser-window.md @@ -364,8 +364,10 @@ It creates a new `BrowserWindow` with native properties as set by the `options`. bits of data down to renderer process preload scripts. * `safeDialogs` Boolean (optional) - Whether to enable browser style consecutive dialog protection. Default is `false`. - * `safeDialogsMessage` String (optional) - The message to display when consecutive - dialog protection is triggered. Default is empty string. + * `safeDialogsMessage` String (optional) - The message to display when + consecutive dialog protection is triggered. If not defined the default + message would be used, note that currently the default message is in + English and not localized. When setting minimum or maximum window size with `minWidth`/`maxWidth`/ `minHeight`/`maxHeight`, it only constrains the users. It won't prevent you from From 7516b059fe888555bb7f770bec6c88718dac3d57 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 6 Mar 2018 11:31:56 +0900 Subject: [PATCH 08/10] Code style fixes --- atom/browser/atom_javascript_dialog_manager.cc | 18 ++++++++---------- atom/browser/atom_javascript_dialog_manager.h | 1 + atom/browser/web_contents_preferences.cc | 6 +++--- atom/browser/web_contents_preferences.h | 6 +++--- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/atom/browser/atom_javascript_dialog_manager.cc b/atom/browser/atom_javascript_dialog_manager.cc index 5c95b02288..34253e8b92 100644 --- a/atom/browser/atom_javascript_dialog_manager.cc +++ b/atom/browser/atom_javascript_dialog_manager.cc @@ -17,12 +17,14 @@ using content::JavaScriptDialogType; -namespace { - constexpr int USER_WANTS_NO_MORE_DIALOGS = -1; -} - namespace atom { +namespace { + +constexpr int kUserWantsNoMoreDialogs = -1; + +} // namespace + AtomJavaScriptDialogManager::AtomJavaScriptDialogManager( api::WebContents* api_web_contents) : api_web_contents_(api_web_contents) {} @@ -36,11 +38,7 @@ void AtomJavaScriptDialogManager::RunJavaScriptDialog( const DialogClosedCallback& callback, bool* did_suppress_message) { const std::string origin = origin_url.GetOrigin().spec(); - if (origin_counts_.find(origin) == origin_counts_.end()) { - origin_counts_[origin] = 0; - } - - if (origin_counts_[origin] == USER_WANTS_NO_MORE_DIALOGS) { + if (origin_counts_[origin] == kUserWantsNoMoreDialogs) { return callback.Run(false, base::string16()); } @@ -97,7 +95,7 @@ void AtomJavaScriptDialogManager::OnMessageBoxCallback( int code, bool checkbox_checked) { if (checkbox_checked) { - (*origin_counts_)[origin] = USER_WANTS_NO_MORE_DIALOGS; + (*origin_counts_)[origin] = kUserWantsNoMoreDialogs; } callback.Run(code == 0, base::string16()); } diff --git a/atom/browser/atom_javascript_dialog_manager.h b/atom/browser/atom_javascript_dialog_manager.h index 8a584218ab..7849d755c1 100644 --- a/atom/browser/atom_javascript_dialog_manager.h +++ b/atom/browser/atom_javascript_dialog_manager.h @@ -42,6 +42,7 @@ class AtomJavaScriptDialogManager : public content::JavaScriptDialogManager { std::map* origins_, int code, bool checkbox_checked); + api::WebContents* api_web_contents_; std::map origin_counts_; }; diff --git a/atom/browser/web_contents_preferences.cc b/atom/browser/web_contents_preferences.cc index 932da8f4a8..7951c36b45 100644 --- a/atom/browser/web_contents_preferences.cc +++ b/atom/browser/web_contents_preferences.cc @@ -301,13 +301,13 @@ bool WebContentsPreferences::GetInteger(const std::string& attributeName, return false; } -bool WebContentsPreferences::GetString(const std::string& attributeName, - std::string* stringValue, +bool WebContentsPreferences::GetString(const std::string& attribute_name, + std::string* string_value, content::WebContents* web_contents) { WebContentsPreferences* self = FromWebContents(web_contents); if (!self) return false; - return self->web_preferences()->GetString(attributeName, stringValue); + return self->web_preferences()->GetString(attribute_name, string_value); } } // namespace atom diff --git a/atom/browser/web_contents_preferences.h b/atom/browser/web_contents_preferences.h index 299c088174..5cc6bd97b2 100644 --- a/atom/browser/web_contents_preferences.h +++ b/atom/browser/web_contents_preferences.h @@ -40,9 +40,9 @@ class WebContentsPreferences static bool IsPreferenceEnabled(const std::string& attribute_name, content::WebContents* web_contents); - static bool GetString(const std::string& attributeName, - std::string* stringValue, - content::WebContents* web_contents); + static bool GetString(const std::string& attribute_name, + std::string* string_value, + content::WebContents* web_contents); // Modify the WebPreferences according to |web_contents|'s preferences. static void OverrideWebkitPrefs( From ca42325ade4a07b14515aa49223482244e734150 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 6 Mar 2018 11:35:53 +0900 Subject: [PATCH 09/10] Make OnMessageBoxCallback a method since it is accessing members --- .../browser/atom_javascript_dialog_manager.cc | 22 +++++++++---------- atom/browser/atom_javascript_dialog_manager.h | 9 ++++---- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/atom/browser/atom_javascript_dialog_manager.cc b/atom/browser/atom_javascript_dialog_manager.cc index 34253e8b92..1f0536b4c2 100644 --- a/atom/browser/atom_javascript_dialog_manager.cc +++ b/atom/browser/atom_javascript_dialog_manager.cc @@ -64,13 +64,14 @@ void AtomJavaScriptDialogManager::RunJavaScriptDialog( checkbox_string = "Prevent this app from creating additional dialogs"; } } - atom::ShowMessageBox(NativeWindow::FromWebContents(web_contents), - atom::MessageBoxType::MESSAGE_BOX_TYPE_NONE, buttons, -1, - 0, atom::MessageBoxOptions::MESSAGE_BOX_NONE, "", - base::UTF16ToUTF8(message_text), "", checkbox_string, - false, gfx::ImageSkia(), - base::Bind(&OnMessageBoxCallback, callback, origin, - &origin_counts_)); + atom::ShowMessageBox( + NativeWindow::FromWebContents(web_contents), + atom::MessageBoxType::MESSAGE_BOX_TYPE_NONE, buttons, -1, 0, + atom::MessageBoxOptions::MESSAGE_BOX_NONE, "", + base::UTF16ToUTF8(message_text), "", checkbox_string, + false, gfx::ImageSkia(), + base::Bind(&AtomJavaScriptDialogManager::OnMessageBoxCallback, + base::Unretained(this), callback, origin)); } void AtomJavaScriptDialogManager::RunBeforeUnloadDialog( @@ -87,16 +88,13 @@ void AtomJavaScriptDialogManager::CancelDialogs( bool reset_state) { } -// static void AtomJavaScriptDialogManager::OnMessageBoxCallback( const DialogClosedCallback& callback, const std::string& origin, - std::map* origin_counts_, int code, bool checkbox_checked) { - if (checkbox_checked) { - (*origin_counts_)[origin] = kUserWantsNoMoreDialogs; - } + if (checkbox_checked) + origin_counts_[origin] = kUserWantsNoMoreDialogs; callback.Run(code == 0, base::string16()); } diff --git a/atom/browser/atom_javascript_dialog_manager.h b/atom/browser/atom_javascript_dialog_manager.h index 7849d755c1..0f5e55403b 100644 --- a/atom/browser/atom_javascript_dialog_manager.h +++ b/atom/browser/atom_javascript_dialog_manager.h @@ -37,11 +37,10 @@ class AtomJavaScriptDialogManager : public content::JavaScriptDialogManager { bool reset_state) override; private: - static void OnMessageBoxCallback(const DialogClosedCallback& callback, - const std::string& origin, - std::map* origins_, - int code, - bool checkbox_checked); + void OnMessageBoxCallback(const DialogClosedCallback& callback, + const std::string& origin, + int code, + bool checkbox_checked); api::WebContents* api_web_contents_; std::map origin_counts_; From 90bd1fd7e967d041f7ae854690c8d46ae4802f01 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 6 Mar 2018 14:06:29 +0900 Subject: [PATCH 10/10] Native confirm/alert throws differently --- spec/chromium-spec.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/spec/chromium-spec.js b/spec/chromium-spec.js index 871af98b4d..37030b1252 100644 --- a/spec/chromium-spec.js +++ b/spec/chromium-spec.js @@ -1088,10 +1088,6 @@ describe('chromium feature', () => { assert.throws(() => { window.alert({toString: null}) }, /Cannot convert object to primitive value/) - - assert.throws(() => { - window.alert('message', {toString: 3}) - }, /Cannot convert object to primitive value/) }) }) @@ -1100,10 +1096,6 @@ describe('chromium feature', () => { assert.throws(() => { window.confirm({toString: null}, 'title') }, /Cannot convert object to primitive value/) - - assert.throws(() => { - window.confirm('message', {toString: 3}) - }, /Cannot convert object to primitive value/) }) })