diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index ffca4a077ba7..b7e8831229da 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -90,6 +90,7 @@ bool WebContents::ShouldCreateWebContents( base::ListValue args; args.AppendString(target_url.spec()); args.AppendString(frame_name); + args.AppendInteger(CURRENT_TAB); Emit("new-window", args); return false; } @@ -101,8 +102,14 @@ void WebContents::CloseContents(content::WebContents* source) { content::WebContents* WebContents::OpenURLFromTab( content::WebContents* source, const content::OpenURLParams& params) { - if (params.disposition != CURRENT_TAB) - return NULL; + if (params.disposition != CURRENT_TAB) { + base::ListValue args; + args.AppendString(params.url.spec()); + args.AppendString(""); + args.AppendInteger(params.disposition); + Emit("new-window", args); + return NULL; + } content::NavigationController::LoadURLParams load_url_params(params.url); load_url_params.referrer = params.referrer; diff --git a/atom/browser/api/atom_api_window.cc b/atom/browser/api/atom_api_window.cc index 4756d324da3d..32f5c6217e20 100644 --- a/atom/browser/api/atom_api_window.cc +++ b/atom/browser/api/atom_api_window.cc @@ -85,10 +85,12 @@ void Window::OnPageTitleUpdated(bool* prevent_default, void Window::WillCreatePopupWindow(const base::string16& frame_name, const GURL& target_url, - const std::string& partition_id) { + const std::string& partition_id, + WindowOpenDisposition disposition) { base::ListValue args; args.AppendString(target_url.spec()); args.AppendString(frame_name); + args.AppendInteger(disposition); Emit("new-window", args); } diff --git a/atom/browser/api/atom_api_window.h b/atom/browser/api/atom_api_window.h index d4abf42bf5cc..905559a8c35f 100644 --- a/atom/browser/api/atom_api_window.h +++ b/atom/browser/api/atom_api_window.h @@ -48,7 +48,8 @@ class Window : public mate::EventEmitter, const std::string& title) override; void WillCreatePopupWindow(const base::string16& frame_name, const GURL& target_url, - const std::string& partition_id) override; + const std::string& partition_id, + WindowOpenDisposition disposition) override; void WillCloseWindow(bool* prevent_default) override; void OnWindowClosed() override; void OnWindowBlur() override; diff --git a/atom/browser/native_window.cc b/atom/browser/native_window.cc index 3a4a7437986c..36ca2a8a56b9 100644 --- a/atom/browser/native_window.cc +++ b/atom/browser/native_window.cc @@ -437,7 +437,8 @@ bool NativeWindow::ShouldCreateWebContents( observers_, WillCreatePopupWindow(frame_name, target_url, - partition_id)); + partition_id, + CURRENT_TAB)); return false; } @@ -448,8 +449,15 @@ bool NativeWindow::ShouldCreateWebContents( content::WebContents* NativeWindow::OpenURLFromTab( content::WebContents* source, const content::OpenURLParams& params) { - if (params.disposition != CURRENT_TAB) - return NULL; + if (params.disposition != CURRENT_TAB) { + FOR_EACH_OBSERVER(NativeWindowObserver, + observers_, + WillCreatePopupWindow(base::string16(), + params.url, + "", + params.disposition)); + return NULL; + } content::NavigationController::LoadURLParams load_url_params(params.url); load_url_params.referrer = params.referrer; diff --git a/atom/browser/native_window_observer.h b/atom/browser/native_window_observer.h index f91f426762be..3d3240585f4d 100644 --- a/atom/browser/native_window_observer.h +++ b/atom/browser/native_window_observer.h @@ -8,6 +8,7 @@ #include #include "base/strings/string16.h" +#include "ui/base/window_open_disposition.h" #include "url/gurl.h" namespace atom { @@ -23,7 +24,8 @@ class NativeWindowObserver { // Called when the web page in window wants to create a popup window. virtual void WillCreatePopupWindow(const base::string16& frame_name, const GURL& target_url, - const std::string& partition_id) {} + const std::string& partition_id, + WindowOpenDisposition disposition) {} // Called when the window is gonna closed. virtual void WillCloseWindow(bool* prevent_default) {} diff --git a/atom/renderer/lib/guest-view-internal.coffee b/atom/renderer/lib/guest-view-internal.coffee index e5e64d0a8066..76474d27ec54 100644 --- a/atom/renderer/lib/guest-view-internal.coffee +++ b/atom/renderer/lib/guest-view-internal.coffee @@ -10,7 +10,7 @@ WEB_VIEW_EVENTS = 'did-stop-loading': [] 'did-get-redirect-request': ['oldUrl', 'newUrl', 'isMainFrame'] 'console-message': ['level', 'message', 'line', 'sourceId'] - 'new-window': ['url', 'frameName'] + 'new-window': ['url', 'frameName', 'disposition'] 'close': [] 'crashed': [] 'destroyed': []