Chromium Code Reviews| Index: chrome/browser/extensions/chrome_extension_function_details.cc |
| diff --git a/chrome/browser/extensions/chrome_extension_function_details.cc b/chrome/browser/extensions/chrome_extension_function_details.cc |
| index 922c96be53d7f720dcdcc1c6b0283b241d441893..d9ff40f253b8e2e3c91dde6d7ea91ca6a960a707 100644 |
| --- a/chrome/browser/extensions/chrome_extension_function_details.cc |
| +++ b/chrome/browser/extensions/chrome_extension_function_details.cc |
| @@ -4,14 +4,18 @@ |
| #include "chrome/browser/extensions/chrome_extension_function_details.h" |
| +#include "chrome/browser/extensions/extension_tab_util.h" |
| #include "chrome/browser/extensions/window_controller.h" |
| #include "chrome/browser/extensions/window_controller_list.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/browser_finder.h" |
| #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| +#include "components/web_modal/web_contents_modal_dialog_manager.h" |
| #include "content/public/browser/render_frame_host.h" |
| #include "content/public/browser/render_process_host.h" |
| +#include "extensions/browser/app_window/app_window.h" |
| +#include "extensions/browser/app_window/app_window_registry.h" |
| #include "extensions/browser/extension_function.h" |
| #include "extensions/browser/extension_function_dispatcher.h" |
| @@ -113,3 +117,37 @@ ChromeExtensionFunctionDetails::GetAssociatedWebContents() { |
| return NULL; |
| return browser->tab_strip_model()->GetActiveWebContents(); |
| } |
| + |
| +content::WebContents* ChromeExtensionFunctionDetails::GetVisibleWebContents() { |
| + WebContents* contents = |
| + WebContents::FromRenderFrameHost(function_->render_frame_host()); |
|
not at google - send to devlin
2015/07/10 17:02:25
You should be able to use GetSenderWebContents() h
|
| + web_modal::WebContentsModalDialogManager* web_contents_modal_dialog_manager = |
|
not at google - send to devlin
2015/07/10 17:02:25
Add comment:
// Hack: use the existence of a WebC
|
| + web_modal::WebContentsModalDialogManager::FromWebContents(contents); |
| + if (!web_contents_modal_dialog_manager) { |
| + // If there is no WebContentsModalDialogManager, then this contents is |
| + // probably the background page for an app. Try to find a app window to |
| + // host the dialog. |
| + contents = nullptr; |
| + |
| + Profile* profile = GetProfile(); |
| + const extensions::Extension* extension = function_->extension(); |
| + if (extension) { |
| + extensions::AppWindow* window = |
|
not at google - send to devlin
2015/07/10 17:57:03
Actually, perhaps you should be using WindowContro
wjywbs
2015/07/10 19:54:22
Turns out that CurrentWindowForFunction() can prop
|
| + extensions::AppWindowRegistry::Get(profile) |
| + ->GetCurrentAppWindowForApp(extension->id()); |
| + if (window) |
| + contents = window->web_contents(); |
|
not at google - send to devlin
2015/07/10 17:02:25
Likewise, early-return (even once moved to the end
|
| + } |
| + |
| + int source_tab_id = function_->source_tab_id(); |
|
not at google - send to devlin
2015/07/10 17:02:25
Tiny request: put the checks for the tab above the
|
| + if (!contents && source_tab_id != TabStripModel::kNoTab) { |
| + // When the request originated from a background page, but there is no |
| + // app window open, check to see if it originated from a tab and display |
| + // the dialog in that tab. |
| + extensions::ExtensionTabUtil::GetTabById(source_tab_id, profile, |
| + profile->IsOffTheRecord(), NULL, |
|
not at google - send to devlin
2015/07/10 17:02:25
just use "true" here, not "profile->IsOffTheRecord
|
| + NULL, &contents, NULL); |
|
not at google - send to devlin
2015/07/10 17:02:25
always use nullptr not NULL now.
|
| + } |
|
not at google - send to devlin
2015/07/10 17:02:25
and early-return.
|
| + } |
| + return contents; |
| +} |