Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(362)

Side by Side Diff: chrome/browser/extensions/extension_tab_util.cc

Issue 1805013005: [Extensions] Allow overriding a nested options page for opening a new instance (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: missing files Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | chrome/browser/extensions/extension_tab_util_browsertest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/extension_tab_util.h" 5 #include "chrome/browser/extensions/extension_tab_util.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 // Force the options page to open in non-OTR window, because it won't be 628 // Force the options page to open in non-OTR window, because it won't be
629 // able to save settings from OTR. 629 // able to save settings from OTR.
630 scoped_ptr<chrome::ScopedTabbedBrowserDisplayer> displayer; 630 scoped_ptr<chrome::ScopedTabbedBrowserDisplayer> displayer;
631 if (browser->profile()->IsOffTheRecord()) { 631 if (browser->profile()->IsOffTheRecord()) {
632 displayer.reset(new chrome::ScopedTabbedBrowserDisplayer( 632 displayer.reset(new chrome::ScopedTabbedBrowserDisplayer(
633 browser->profile()->GetOriginalProfile())); 633 browser->profile()->GetOriginalProfile()));
634 browser = displayer->browser(); 634 browser = displayer->browser();
635 } 635 }
636 636
637 GURL url_to_navigate; 637 GURL url_to_navigate;
638 if (OptionsPageInfo::ShouldOpenInTab(extension)) { 638 bool open_in_tab = OptionsPageInfo::ShouldOpenInTab(extension);
639 if (open_in_tab) {
639 // Options page tab is simply e.g. chrome-extension://.../options.html. 640 // Options page tab is simply e.g. chrome-extension://.../options.html.
640 url_to_navigate = OptionsPageInfo::GetOptionsPage(extension); 641 url_to_navigate = OptionsPageInfo::GetOptionsPage(extension);
641 } else { 642 } else {
642 // Options page tab is Extension settings pointed at that Extension's ID, 643 // Options page tab is Extension settings pointed at that Extension's ID,
643 // e.g. chrome://extensions?options=... 644 // e.g. chrome://extensions?options=...
644 url_to_navigate = GURL(chrome::kChromeUIExtensionsURL); 645 url_to_navigate = GURL(chrome::kChromeUIExtensionsURL);
645 GURL::Replacements replacements; 646 GURL::Replacements replacements;
646 std::string query = 647 std::string query =
647 base::StringPrintf("options=%s", extension->id().c_str()); 648 base::StringPrintf("options=%s", extension->id().c_str());
648 replacements.SetQueryStr(query); 649 replacements.SetQueryStr(query);
649 url_to_navigate = url_to_navigate.ReplaceComponents(replacements); 650 url_to_navigate = url_to_navigate.ReplaceComponents(replacements);
650 } 651 }
651 652
652 chrome::NavigateParams params( 653 chrome::NavigateParams params(
653 chrome::GetSingletonTabNavigateParams(browser, url_to_navigate)); 654 chrome::GetSingletonTabNavigateParams(browser, url_to_navigate));
654 // We need to respect path differences because we don't want opening the 655 // We need to respect path differences because we don't want opening the
655 // options page to close a page that might be open to extension content. 656 // options page to close a page that might be open to extension content.
657 // However, if the options page opens inside the chrome://extensions page, we
658 // can override an existing page.
656 // Note: default ref behavior is IGNORE_REF, which is correct. 659 // Note: default ref behavior is IGNORE_REF, which is correct.
657 params.path_behavior = chrome::NavigateParams::RESPECT; 660 params.path_behavior = open_in_tab
661 ? chrome::NavigateParams::RESPECT
662 : chrome::NavigateParams::IGNORE_AND_NAVIGATE;
658 params.url = url_to_navigate; 663 params.url = url_to_navigate;
659 chrome::ShowSingletonTabOverwritingNTP(browser, params); 664 chrome::ShowSingletonTabOverwritingNTP(browser, params);
660 return true; 665 return true;
661 } 666 }
662 667
663 // static 668 // static
664 bool ExtensionTabUtil::BrowserSupportsTabs(Browser* browser) { 669 bool ExtensionTabUtil::BrowserSupportsTabs(Browser* browser) {
665 return browser && browser->tab_strip_model() && !browser->is_devtools(); 670 return browser && browser->tab_strip_model() && !browser->is_devtools();
666 } 671 }
667 672
668 } // namespace extensions 673 } // namespace extensions
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/extensions/extension_tab_util_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698