diff options
author | ericzeng <ericzeng@chromium.org> | 2014-08-25 20:07:30 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-08-26 03:08:52 +0000 |
commit | f97b7c27ac0f16f163bbe9753cd84d79eafccb37 (patch) | |
tree | 3fcf20c382ee719703fd1ca99ea9c7ead042c57b /chrome/browser/extensions | |
parent | 94f4bd9c8bf1ab611a41b290e8feb1d48fdb1f21 (diff) | |
download | chromium_src-f97b7c27ac0f16f163bbe9753cd84d79eafccb37.zip chromium_src-f97b7c27ac0f16f163bbe9753cd84d79eafccb37.tar.gz chromium_src-f97b7c27ac0f16f163bbe9753cd84d79eafccb37.tar.bz2 |
Open embedded extension options from the extension action context menu
This CL allows the extension action context menu to use the new embedded
extension options feature. If the enable-embedded-extension-options flag
is enabled, instead of opening an extension's options page in it's own
tab, it will open chrome://extensions, scroll down to the correct
extension, and then open the embedded options page popup.
The context menu opens a link to chrome://extensions/ with the query
string ?options=|extensionId|. This query string is appended and
removed whenever the embedded extension options popup is opened or
closed.
BUG=386842
Review URL: https://codereview.chromium.org/484033003
Cr-Commit-Position: refs/heads/master@{#291826}
Diffstat (limited to 'chrome/browser/extensions')
-rw-r--r-- | chrome/browser/extensions/extension_tab_util.cc | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/chrome/browser/extensions/extension_tab_util.cc b/chrome/browser/extensions/extension_tab_util.cc index 7599108..4fc76cb 100644 --- a/chrome/browser/extensions/extension_tab_util.cc +++ b/chrome/browser/extensions/extension_tab_util.cc @@ -7,6 +7,7 @@ #include "apps/app_window.h" #include "apps/app_window_registry.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/stringprintf.h" #include "chrome/browser/extensions/api/tabs/tabs_constants.h" #include "chrome/browser/extensions/chrome_extension_function.h" #include "chrome/browser/extensions/tab_helper.h" @@ -19,6 +20,7 @@ #include "chrome/browser/ui/browser_iterator.h" #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/scoped_tabbed_browser_displayer.h" +#include "chrome/browser/ui/singleton_tabs.h" #include "chrome/browser/ui/tab_contents/tab_contents_iterator.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/common/extensions/api/tabs.h" @@ -31,6 +33,7 @@ #include "extensions/common/constants.h" #include "extensions/common/error_utils.h" #include "extensions/common/extension.h" +#include "extensions/common/feature_switch.h" #include "extensions/common/manifest_constants.h" #include "extensions/common/manifest_handlers/incognito_info.h" #include "extensions/common/permissions/api_permission.h" @@ -566,16 +569,33 @@ void ExtensionTabUtil::OpenOptionsPage(const Extension* extension, browser = displayer->browser(); } - content::OpenURLParams params(ManifestURL::GetOptionsPage(extension), - content::Referrer(), - SINGLETON_TAB, - content::PAGE_TRANSITION_LINK, - false); - browser->OpenURL(params); - browser->window()->Show(); - WebContents* web_contents = - browser->tab_strip_model()->GetActiveWebContents(); - web_contents->GetDelegate()->ActivateContents(web_contents); + if (FeatureSwitch::embedded_extension_options()->IsEnabled()) { + // If embedded extension options are enabled, open chrome://extensions + // in a new tab and show the extension options in an embedded popup. + chrome::NavigateParams params(chrome::GetSingletonTabNavigateParams( + browser, GURL(chrome::kChromeUIExtensionsURL))); + params.path_behavior = chrome::NavigateParams::IGNORE_AND_NAVIGATE; + + GURL::Replacements replacements; + std::string query = + base::StringPrintf("options=%s", extension->id().c_str()); + replacements.SetQueryStr(query); + params.url = params.url.ReplaceComponents(replacements); + + chrome::ShowSingletonTabOverwritingNTP(browser, params); + } else { + // Otherwise open a new tab with the extension's options page + content::OpenURLParams params(ManifestURL::GetOptionsPage(extension), + content::Referrer(), + SINGLETON_TAB, + content::PAGE_TRANSITION_LINK, + false); + browser->OpenURL(params); + browser->window()->Show(); + WebContents* web_contents = + browser->tab_strip_model()->GetActiveWebContents(); + web_contents->GetDelegate()->ActivateContents(web_contents); + } } } // namespace extensions |