diff options
author | twiz@google.com <twiz@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-02 17:56:11 +0000 |
---|---|---|
committer | twiz@google.com <twiz@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-02 17:56:11 +0000 |
commit | e8af70c334b4dc4186e26eb54559e9f5384e3d0a (patch) | |
tree | e8606ec6aefc556596cc189a0066213f780945da /chrome/browser | |
parent | 80f037afb3a22b81dacf80611f5409b7cf0fc07a (diff) | |
download | chromium_src-e8af70c334b4dc4186e26eb54559e9f5384e3d0a.zip chromium_src-e8af70c334b4dc4186e26eb54559e9f5384e3d0a.tar.gz chromium_src-e8af70c334b4dc4186e26eb54559e9f5384e3d0a.tar.bz2 |
Change removing method, GetBrowser from TabContentsDelegate, as this was breaking an abstraction layer. This routine was originally added in CL 434046, which required the Browser* to construct extension popup views from within Chrome-Frame instances.
I changed all accesses to Browser instances from usage of the above method, to either iterating the BrowserList using the situation-specific profile as a search key, or modifying the appropriate delegate interfaces to provide the functionality that was previously used directly via the Browser.
BUG=None
TEST=None
Review URL: http://codereview.chromium.org/2941001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@54560 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
22 files changed, 106 insertions, 91 deletions
diff --git a/chrome/browser/autofill/autofill_cc_infobar_delegate.cc b/chrome/browser/autofill/autofill_cc_infobar_delegate.cc index 89c17ba..7953d86 100644 --- a/chrome/browser/autofill/autofill_cc_infobar_delegate.cc +++ b/chrome/browser/autofill/autofill_cc_infobar_delegate.cc @@ -9,7 +9,6 @@ #include "base/histogram.h" #include "chrome/browser/autofill/autofill_cc_infobar.h" #include "chrome/browser/autofill/autofill_manager.h" -#include "chrome/browser/browser.h" #include "chrome/browser/pref_service.h" #include "chrome/browser/profile.h" #include "chrome/browser/tab_contents/tab_contents.h" @@ -23,15 +22,9 @@ AutoFillCCInfoBarDelegate::AutoFillCCInfoBarDelegate(TabContents* tab_contents, AutoFillManager* host) : ConfirmInfoBarDelegate(tab_contents), - browser_(NULL), host_(host) { - if (tab_contents) { - // This is NULL for TestTabContents. - if (tab_contents->delegate()) - browser_ = tab_contents->delegate()->GetBrowser(); - + if (tab_contents) tab_contents->AddInfoBar(this); - } } AutoFillCCInfoBarDelegate::~AutoFillCCInfoBarDelegate() { @@ -103,8 +96,8 @@ std::wstring AutoFillCCInfoBarDelegate::GetLinkText() { } bool AutoFillCCInfoBarDelegate::LinkClicked(WindowOpenDisposition disposition) { - browser_->OpenURL(GURL(kAutoFillLearnMoreUrl), GURL(), NEW_FOREGROUND_TAB, - PageTransition::TYPED); + host_->tab_contents()->OpenURL(GURL(kAutoFillLearnMoreUrl), GURL(), + NEW_FOREGROUND_TAB, PageTransition::TYPED); return false; } diff --git a/chrome/browser/autofill/autofill_cc_infobar_delegate.h b/chrome/browser/autofill/autofill_cc_infobar_delegate.h index 32a7c82..6a8091e 100644 --- a/chrome/browser/autofill/autofill_cc_infobar_delegate.h +++ b/chrome/browser/autofill/autofill_cc_infobar_delegate.h @@ -11,7 +11,6 @@ #include "chrome/browser/tab_contents/infobar_delegate.h" class AutoFillManager; -class Browser; class SkBitmap; class TabContents; @@ -46,9 +45,6 @@ class AutoFillCCInfoBarDelegate : public ConfirmInfoBarDelegate { } private: - // The browser. - Browser* browser_; - // The AutoFillManager that initiated this InfoBar. AutoFillManager* host_; diff --git a/chrome/browser/autofill/autofill_manager.h b/chrome/browser/autofill/autofill_manager.h index 964b8bc..4858a5e 100644 --- a/chrome/browser/autofill/autofill_manager.h +++ b/chrome/browser/autofill/autofill_manager.h @@ -45,6 +45,9 @@ class AutoFillManager : public RenderViewHostDelegate::AutoFill, // Registers our Enable/Disable AutoFill pref. static void RegisterUserPrefs(PrefService* prefs); + // Returns the TabContents hosting this AutoFillManager. + TabContents* tab_contents() const { return tab_contents_; } + // RenderViewHostDelegate::AutoFill implementation: virtual void FormSubmitted(const webkit_glue::FormData& form); virtual void FormsSeen(const std::vector<webkit_glue::FormData>& forms); diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc index cdd32ae..d5ffa64 100644 --- a/chrome/browser/browser.cc +++ b/chrome/browser/browser.cc @@ -531,10 +531,10 @@ TabContents* Browser::OpenApplication(Profile* profile, case Extension::LAUNCH_WINDOW: case Extension::LAUNCH_PANEL: tab = Browser::OpenApplicationWindow(profile, extension, container, - GURL()); + GURL(), &browser); break; case Extension::LAUNCH_TAB: { - tab = Browser::OpenApplicationTab(profile, extension); + tab = Browser::OpenApplicationTab(profile, extension, &browser); break; } default: @@ -542,7 +542,6 @@ TabContents* Browser::OpenApplication(Profile* profile, break; } if (tab) { - Browser* browser = tab->delegate()->GetBrowser(); if (browser && extension && extension->launch_fullscreen()) browser->window()->SetFullscreen(true); } @@ -554,7 +553,8 @@ TabContents* Browser::OpenApplicationWindow( Profile* profile, Extension* extension, Extension::LaunchContainer container, - const GURL& url_input) { + const GURL& url_input, + Browser** browser) { GURL url; if (!url_input.is_empty()) { if (extension) @@ -570,15 +570,15 @@ TabContents* Browser::OpenApplicationWindow( RegisterAppPrefs(app_name); bool as_panel = extension && (container == Extension::LAUNCH_PANEL); - Browser* browser = Browser::CreateForApp(app_name, extension, profile, - as_panel); - TabContents* tab_contents = browser->AddTabWithURL( + Browser* local_browser = Browser::CreateForApp(app_name, extension, profile, + as_panel); + TabContents* tab_contents = local_browser->AddTabWithURL( url, GURL(), PageTransition::START_PAGE, -1, TabStripModel::ADD_SELECTED, NULL, std::string()); tab_contents->GetMutableRendererPrefs()->can_accept_load_drops = false; tab_contents->render_view_host()->SyncRendererPrefs(); - browser->window()->Show(); + local_browser->window()->Show(); // TODO(jcampan): http://crbug.com/8123 we should not need to set the initial // focus explicitly. @@ -591,33 +591,42 @@ TabContents* Browser::OpenApplicationWindow( // OnDidGetApplicationInfo, which calls // web_app::UpdateShortcutForTabContents when it sees UPDATE_SHORTCUT as // pending web app action. - browser->pending_web_app_action_ = UPDATE_SHORTCUT; + local_browser->pending_web_app_action_ = UPDATE_SHORTCUT; } + if (browser) + *browser = local_browser; + return tab_contents; } // static TabContents* Browser::OpenApplicationWindow(Profile* profile, - GURL& url) { - return OpenApplicationWindow(profile, NULL, Extension::LAUNCH_WINDOW, url); + GURL& url, Browser** browser) { + return OpenApplicationWindow(profile, NULL, Extension::LAUNCH_WINDOW, url, + browser); } // static TabContents* Browser::OpenApplicationTab(Profile* profile, - Extension* extension) { - Browser* browser = BrowserList::GetLastActiveWithProfile(profile); - if (!browser || browser->type() != Browser::TYPE_NORMAL) + Extension* extension, + Browser** browser) { + Browser* local_browser = BrowserList::GetLastActiveWithProfile(profile); + if (!local_browser || local_browser->type() != Browser::TYPE_NORMAL) return NULL; // TODO(erikkay): This doesn't seem like the right transition in all cases. PageTransition::Type transition = PageTransition::START_PAGE; GURL url = extension->GetFullLaunchURL(); TabContents* tab_contents = - browser->CreateTabContentsForURL(url, GURL(), profile, - transition, false, NULL); + local_browser->CreateTabContentsForURL(url, GURL(), profile, + transition, false, NULL); tab_contents->SetExtensionApp(extension); - browser->AddTab(tab_contents, transition); + local_browser->AddTab(tab_contents, transition); + + if (browser) + *browser = local_browser; + return tab_contents; } @@ -2374,6 +2383,13 @@ void Browser::ToggleUseVerticalTabs() { UseVerticalTabsChanged(); } +bool Browser::LargeIconsPermitted() const { + // We don't show the big icons in tabs for TYPE_EXTENSION_APP windows because + // for those windows, we already have a big icon in the top-left outside any + // tab. Having big tab icons too looks kinda redonk. + return TYPE_EXTENSION_APP != type(); +} + /////////////////////////////////////////////////////////////////////////////// // Browser, TabStripModelObserver implementation: @@ -2925,10 +2941,6 @@ void Browser::OnDidGetApplicationInfo(TabContents* tab_contents, pending_web_app_action_ = NONE; } -Browser* Browser::GetBrowser() { - return this; -} - void Browser::ContentTypeChanged(TabContents* source) { if (source == GetSelectedTabContents()) UpdateZoomCommandsForTabState(); @@ -3729,7 +3741,7 @@ bool Browser::HandleCrossAppNavigation(TabContents* source, if (destination_extension->launch_container() == Extension::LAUNCH_WINDOW) { Browser::OpenApplicationWindow(profile_, destination_extension, - Extension::LAUNCH_WINDOW, url); + Extension::LAUNCH_WINDOW, url, NULL); return true; } } diff --git a/chrome/browser/browser.h b/chrome/browser/browser.h index 87456fb..c990ee2 100644 --- a/chrome/browser/browser.h +++ b/chrome/browser/browser.h @@ -227,20 +227,29 @@ class Browser : public TabStripModelDelegate, // app panel window, otherwise it will be opened as as either // Browser::Type::APP a.k.a. "thin frame" (if |extension| is NULL) or // Browser::Type::EXTENSION_APP (if |extension| is non-NULL). + // Returns the browser hosting for the TabContents via optional parameter, + // |browser|. static TabContents* OpenApplicationWindow( Profile* profile, Extension* extension, Extension::LaunchContainer container, - const GURL& url); + const GURL& url, + Browser** browser); // Open an application for |extension| in a new application window or panel. + // Returns the browser hosting the TabContents via optional parameter, + // |browser|. static TabContents* OpenApplicationWindow(Profile* profile, - GURL& url); + GURL& url, + Browser** browser); // Open an application for |extension| in a new application tab. Returns // NULL if there are no appropriate existing browser windows for |profile|. + // Returns the browser hosting the TabContents via optional parameter, + // |browser|. static TabContents* OpenApplicationTab(Profile* profile, - Extension* extension); + Extension* extension, + Browser** browser); // Opens a new window and opens the bookmark manager. static void OpenBookmarkManagerWindow(Profile* profile); @@ -655,6 +664,7 @@ class Browser : public TabStripModelDelegate, virtual void ToggleUseVerticalTabs(); virtual bool CanRestoreTab(); virtual void RestoreTab(); + virtual bool LargeIconsPermitted() const; // Overridden from TabStripModelObserver: virtual void TabInsertedAt(TabContents* contents, @@ -734,7 +744,6 @@ class Browser : public TabStripModelDelegate, virtual bool ShouldAddNavigationsToHistory() const; virtual void OnDidGetApplicationInfo(TabContents* tab_contents, int32 page_id); - virtual Browser* GetBrowser(); virtual void ContentTypeChanged(TabContents* source); // Overridden from SelectFileDialog::Listener: diff --git a/chrome/browser/browser_browsertest.cc b/chrome/browser/browser_browsertest.cc index 528c9e4..68a29d3 100644 --- a/chrome/browser/browser_browsertest.cc +++ b/chrome/browser/browser_browsertest.cc @@ -707,7 +707,8 @@ IN_PROC_BROWSER_TEST_F(BrowserAppRefocusTest, MAYBE_OpenTab) { ASSERT_EQ(NULL, Browser::FindAppTab(browser(), extension_app_)); // Open a tab with the app. - TabContents* tab = Browser::OpenApplicationTab(profile_, extension_app_); + TabContents* tab = Browser::OpenApplicationTab(profile_, extension_app_, + NULL); ASSERT_TRUE(WaitForTab(tab)); ASSERT_EQ(2, browser()->tab_count()); @@ -764,7 +765,7 @@ IN_PROC_BROWSER_TEST_F(BrowserAppRefocusTest, MAYBE_OpenPanel) { // Open the app in a panel. Browser::OpenApplicationWindow(profile_, extension_app_, - Extension::LAUNCH_PANEL, GURL()); + Extension::LAUNCH_PANEL, GURL(), NULL); Browser* app_panel = BrowserList::GetLastActive(); ASSERT_TRUE(app_panel); ASSERT_NE(app_panel, browser()) << "New browser should have opened."; @@ -797,7 +798,7 @@ IN_PROC_BROWSER_TEST_F(BrowserAppRefocusTest, MAYBE_OpenWindow) { // Open a window with the app. Browser::OpenApplicationWindow(profile_, extension_app_, - Extension::LAUNCH_WINDOW, GURL()); + Extension::LAUNCH_WINDOW, GURL(), NULL); Browser* app_window = BrowserList::GetLastActive(); ASSERT_TRUE(app_window); ASSERT_NE(app_window, browser()) << "New browser should have opened."; @@ -825,7 +826,7 @@ IN_PROC_BROWSER_TEST_F(BrowserAppRefocusTest, MAYBE_WindowBeforeTab) { ASSERT_EQ(1, browser()->tab_count()); // Open a tab with the app. - Browser::OpenApplicationTab(profile_, extension_app_); + Browser::OpenApplicationTab(profile_, extension_app_, NULL); ASSERT_TRUE(ui_test_utils::WaitForNavigationInCurrentTab(browser())); ASSERT_EQ(2, browser()->tab_count()); int app_tab_index = browser()->selected_index(); @@ -833,7 +834,7 @@ IN_PROC_BROWSER_TEST_F(BrowserAppRefocusTest, MAYBE_WindowBeforeTab) { // Open a window with the app. Browser::OpenApplicationWindow(profile_, extension_app_, - Extension::LAUNCH_WINDOW, GURL()); + Extension::LAUNCH_WINDOW, GURL(), NULL); Browser* app_window = BrowserList::GetLastActive(); ASSERT_TRUE(app_window); ASSERT_NE(app_window, browser()) << "New browser should have opened."; @@ -854,7 +855,8 @@ IN_PROC_BROWSER_TEST_F(BrowserAppRefocusTest, MAYBE_PanelBeforeTab) { ASSERT_EQ(1, browser()->tab_count()); // Open a tab with the app. - TabContents* tab = Browser::OpenApplicationTab(profile_, extension_app_); + TabContents* tab = Browser::OpenApplicationTab(profile_, extension_app_, + NULL); ASSERT_TRUE(WaitForTab(tab)); ASSERT_EQ(2, browser()->tab_count()); int app_tab_index = browser()->selected_index(); @@ -862,7 +864,7 @@ IN_PROC_BROWSER_TEST_F(BrowserAppRefocusTest, MAYBE_PanelBeforeTab) { // Open a panel with the app. Browser::OpenApplicationWindow(profile_, extension_app_, - Extension::LAUNCH_PANEL, GURL()); + Extension::LAUNCH_PANEL, GURL(), NULL); Browser* app_panel = BrowserList::GetLastActive(); ASSERT_TRUE(app_panel); ASSERT_NE(app_panel, browser()) << "New browser should have opened."; @@ -882,7 +884,7 @@ IN_PROC_BROWSER_TEST_F(BrowserAppRefocusTest, MAYBE_TabInFocusedWindow) { ASSERT_EQ(1, browser()->tab_count()); - Browser::OpenApplicationTab(profile_, extension_app_); + Browser::OpenApplicationTab(profile_, extension_app_, NULL); ASSERT_TRUE(ui_test_utils::WaitForNavigationInCurrentTab(browser())); ASSERT_EQ(2, browser()->tab_count()); int app_tab_index = browser()->selected_index(); @@ -892,7 +894,7 @@ IN_PROC_BROWSER_TEST_F(BrowserAppRefocusTest, MAYBE_TabInFocusedWindow) { Browser* extra_browser = CreateBrowser(profile_); ASSERT_EQ(extra_browser, BrowserList::GetLastActive()); - Browser::OpenApplicationTab(profile_, extension_app_); + Browser::OpenApplicationTab(profile_, extension_app_, NULL); ASSERT_TRUE(ui_test_utils::WaitForNavigationInCurrentTab(extra_browser)); ASSERT_EQ(2, extra_browser->tab_count()); app_tab_index = extra_browser->selected_index(); diff --git a/chrome/browser/browser_init.cc b/chrome/browser/browser_init.cc index 58615eb..cf06a3c 100644 --- a/chrome/browser/browser_init.cc +++ b/chrome/browser/browser_init.cc @@ -632,7 +632,7 @@ bool BrowserInit::LaunchWithProfile::OpenApplicationWindow(Profile* profile) { ChildProcessSecurityPolicy::GetInstance(); if (policy->IsWebSafeScheme(url.scheme()) || url.SchemeIs(chrome::kFileScheme)) { - Browser::OpenApplicationWindow(profile, url); + Browser::OpenApplicationWindow(profile, url, NULL); return true; } } diff --git a/chrome/browser/cocoa/tab_strip_controller_unittest.mm b/chrome/browser/cocoa/tab_strip_controller_unittest.mm index 2a161ab..d41a9f0 100644 --- a/chrome/browser/cocoa/tab_strip_controller_unittest.mm +++ b/chrome/browser/cocoa/tab_strip_controller_unittest.mm @@ -67,6 +67,8 @@ class TestTabStripDelegate : public TabStripModelDelegate { virtual bool UseVerticalTabs() const { return false; } virtual void ToggleUseVerticalTabs() {} + + virtual bool LargeIconsPermitted() const { return true; } }; class TabStripControllerTest : public CocoaTest { diff --git a/chrome/browser/dom_ui/dom_ui.cc b/chrome/browser/dom_ui/dom_ui.cc index 82dcb4b..debe141 100644 --- a/chrome/browser/dom_ui/dom_ui.cc +++ b/chrome/browser/dom_ui/dom_ui.cc @@ -86,7 +86,7 @@ void DOMUI::RegisterMessageCallback(const std::string &message, message_callbacks_.insert(std::make_pair(message, callback)); } -Profile* DOMUI::GetProfile() { +Profile* DOMUI::GetProfile() const { return tab_contents()->profile(); } diff --git a/chrome/browser/dom_ui/dom_ui.h b/chrome/browser/dom_ui/dom_ui.h index 1b333a8..d29425d 100644 --- a/chrome/browser/dom_ui/dom_ui.h +++ b/chrome/browser/dom_ui/dom_ui.h @@ -116,7 +116,7 @@ class DOMUI { TabContents* tab_contents() const { return tab_contents_; } - Profile* GetProfile(); + Profile* GetProfile() const; protected: void AddMessageHandler(DOMMessageHandler* handler); diff --git a/chrome/browser/dom_ui/history2_ui.cc b/chrome/browser/dom_ui/history2_ui.cc index 067fec3..2ac33ea 100644 --- a/chrome/browser/dom_ui/history2_ui.cc +++ b/chrome/browser/dom_ui/history2_ui.cc @@ -17,6 +17,7 @@ #include "base/values.h" #include "chrome/browser/bookmarks/bookmark_model.h" #include "chrome/browser/browser.h" +#include "chrome/browser/browser_list.h" #include "chrome/browser/chrome_thread.h" #include "chrome/browser/dom_ui/dom_ui_favicon_source.h" #include "chrome/browser/metrics/user_metrics.h" @@ -235,8 +236,11 @@ void BrowsingHistoryHandler2::HandleRemoveURLsOnOneDay(const Value* value) { } void BrowsingHistoryHandler2::HandleClearBrowsingData(const Value* value) { - dom_ui_->tab_contents()->delegate()->GetBrowser()-> - OpenClearBrowsingDataDialog(); + // TODO(beng): This is an improper direct dependency on Browser. Route this + // through some sort of delegate. + Browser* browser = BrowserList::FindBrowserWithProfile(dom_ui_->GetProfile()); + if (browser) + browser->OpenClearBrowsingDataDialog(); } void BrowsingHistoryHandler2::QueryComplete( diff --git a/chrome/browser/dom_ui/history_ui.cc b/chrome/browser/dom_ui/history_ui.cc index fc4fd63..e106c4c 100644 --- a/chrome/browser/dom_ui/history_ui.cc +++ b/chrome/browser/dom_ui/history_ui.cc @@ -17,6 +17,7 @@ #include "base/values.h" #include "chrome/browser/bookmarks/bookmark_model.h" #include "chrome/browser/browser.h" +#include "chrome/browser/browser_list.h" #include "chrome/browser/chrome_thread.h" #include "chrome/browser/dom_ui/dom_ui_favicon_source.h" #include "chrome/browser/metrics/user_metrics.h" @@ -235,8 +236,11 @@ void BrowsingHistoryHandler::HandleRemoveURLsOnOneDay(const Value* value) { } void BrowsingHistoryHandler::HandleClearBrowsingData(const Value* value) { - dom_ui_->tab_contents()->delegate()->GetBrowser()-> - OpenClearBrowsingDataDialog(); + // TODO(beng): This is an improper direct dependency on Browser. Route this + // through some sort of delegate. + Browser* browser = BrowserList::FindBrowserWithProfile(dom_ui_->GetProfile()); + if (browser) + browser->OpenClearBrowsingDataDialog(); } void BrowsingHistoryHandler::QueryComplete( diff --git a/chrome/browser/extensions/extension_dom_ui.cc b/chrome/browser/extensions/extension_dom_ui.cc index 7cbe08f..550f45f 100644 --- a/chrome/browser/extensions/extension_dom_ui.cc +++ b/chrome/browser/extensions/extension_dom_ui.cc @@ -176,12 +176,9 @@ void ExtensionDOMUI::ProcessDOMUIMessage(const std::string& message, } Browser* ExtensionDOMUI::GetBrowser() const { - Browser* browser = NULL; - TabContentsDelegate* tab_contents_delegate = tab_contents()->delegate(); - if (tab_contents_delegate) - browser = tab_contents_delegate->GetBrowser(); - - return browser; + // TODO(beng): This is an improper direct dependency on Browser. Route this + // through some sort of delegate. + return BrowserList::FindBrowserWithProfile(DOMUI::GetProfile()); } Profile* ExtensionDOMUI::GetProfile() { diff --git a/chrome/browser/external_tab_container_win.h b/chrome/browser/external_tab_container_win.h index 0db6625..031378e 100644 --- a/chrome/browser/external_tab_container_win.h +++ b/chrome/browser/external_tab_container_win.h @@ -148,8 +148,6 @@ class ExternalTabContainer : public TabContentsDelegate, const NavigationEntry::SSLStatus& ssl, bool show_history); - virtual Browser* GetBrowser() { return browser_.get(); } - // Overriden from TabContentsDelegate::AutomationResourceRoutingDelegate virtual void RegisterRenderViewHost(RenderViewHost* render_view_host); virtual void UnregisterRenderViewHost(RenderViewHost* render_view_host); diff --git a/chrome/browser/tab_contents/tab_contents.cc b/chrome/browser/tab_contents/tab_contents.cc index 5ab30a2..41e644c 100644 --- a/chrome/browser/tab_contents/tab_contents.cc +++ b/chrome/browser/tab_contents/tab_contents.cc @@ -23,7 +23,6 @@ #include "chrome/browser/autofill/autofill_manager.h" #include "chrome/browser/blocked_popup_container.h" #include "chrome/browser/bookmarks/bookmark_model.h" -#include "chrome/browser/browser.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/browser_shutdown.h" #include "chrome/browser/cert_store.h" @@ -539,13 +538,6 @@ void TabContents::SetExtensionAppById(const std::string& extension_app_id) { } SkBitmap* TabContents::GetExtensionAppIcon() { - // We don't show the big icons in tabs for TYPE_EXTENSION_APP windows because - // for those windows, we already have a big icon in the top-left outside any - // tab. Having big tab icons too looks kinda redonk. - Browser* browser = delegate_ ? delegate_->GetBrowser() : NULL; - if (browser && browser->type() == Browser::TYPE_EXTENSION_APP) - return NULL; - if (extension_app_icon_.empty()) return NULL; diff --git a/chrome/browser/tab_contents/tab_contents_delegate.cc b/chrome/browser/tab_contents/tab_contents_delegate.cc index 9cf9f88..8a03160 100644 --- a/chrome/browser/tab_contents/tab_contents_delegate.cc +++ b/chrome/browser/tab_contents/tab_contents_delegate.cc @@ -139,10 +139,6 @@ void TabContentsDelegate::OnDidGetApplicationInfo(TabContents* tab_contents, int32 page_id) { } -Browser* TabContentsDelegate::GetBrowser() { - return NULL; -} - gfx::NativeWindow TabContentsDelegate::GetFrameNativeWindow() { return NULL; } diff --git a/chrome/browser/tab_contents/tab_contents_delegate.h b/chrome/browser/tab_contents/tab_contents_delegate.h index ff1f49b..c97483c 100644 --- a/chrome/browser/tab_contents/tab_contents_delegate.h +++ b/chrome/browser/tab_contents/tab_contents_delegate.h @@ -19,7 +19,6 @@ #include "webkit/glue/context_menu.h" #include "webkit/glue/window_open_disposition.h" -class Browser; class DownloadItem; class ExtensionFunctionDispatcher; class GURL; @@ -248,9 +247,6 @@ class TabContentsDelegate : public AutomationResourceRoutingDelegate { virtual void OnDidGetApplicationInfo(TabContents* tab_contents, int32 page_id); - // Returns the browser in which the tab contents is being displayed. - virtual Browser* GetBrowser(); - // Returns the native window framing the view containing the tab contents. virtual gfx::NativeWindow GetFrameNativeWindow(); diff --git a/chrome/browser/tabs/tab_strip_model.h b/chrome/browser/tabs/tab_strip_model.h index f93bfc5..92cecfd 100644 --- a/chrome/browser/tabs/tab_strip_model.h +++ b/chrome/browser/tabs/tab_strip_model.h @@ -241,6 +241,9 @@ class TabStripModelDelegate { // Toggles the use of the vertical tabstrip. virtual void ToggleUseVerticalTabs() = 0; + // Returns true if the tab strip can use large icons. + virtual bool LargeIconsPermitted() const = 0; + protected: virtual ~TabStripModelDelegate() {} }; diff --git a/chrome/browser/tabs/tab_strip_model_unittest.cc b/chrome/browser/tabs/tab_strip_model_unittest.cc index c885d5f..6f53630 100644 --- a/chrome/browser/tabs/tab_strip_model_unittest.cc +++ b/chrome/browser/tabs/tab_strip_model_unittest.cc @@ -80,6 +80,7 @@ class TabStripDummyDelegate : public TabStripModelDelegate { virtual void BookmarkAllTabs() {} virtual bool UseVerticalTabs() const { return false; } virtual void ToggleUseVerticalTabs() {} + virtual bool LargeIconsPermitted() const { return true; } private: // A dummy TabContents we give to callers that expect us to actually build a diff --git a/chrome/browser/views/frame/browser_view.cc b/chrome/browser/views/frame/browser_view.cc index 0e11eaa..1df704d 100644 --- a/chrome/browser/views/frame/browser_view.cc +++ b/chrome/browser/views/frame/browser_view.cc @@ -1701,7 +1701,7 @@ void BrowserView::InitTabStrip(TabStripModel* model) { } BrowserTabStripController* tabstrip_controller = - new BrowserTabStripController(model); + new BrowserTabStripController(browser_.get(), model); if (UseVerticalTabs()) tabstrip_ = new SideTabStrip(tabstrip_controller); diff --git a/chrome/browser/views/tabs/browser_tab_strip_controller.cc b/chrome/browser/views/tabs/browser_tab_strip_controller.cc index 1221133..f0422f1 100644 --- a/chrome/browser/views/tabs/browser_tab_strip_controller.cc +++ b/chrome/browser/views/tabs/browser_tab_strip_controller.cc @@ -112,9 +112,11 @@ class BrowserTabStripController::TabContextMenuContents //////////////////////////////////////////////////////////////////////////////// // BrowserTabStripController, public: -BrowserTabStripController::BrowserTabStripController(TabStripModel* model) +BrowserTabStripController::BrowserTabStripController(Browser* browser, + TabStripModel* model) : model_(model), - tabstrip_(NULL) { + tabstrip_(NULL), + browser_(browser) { model_->AddObserver(this); notification_registrar_.Add(this, @@ -269,12 +271,7 @@ void BrowserTabStripController::CreateNewTab() { UserMetrics::RecordAction(UserMetricsAction("NewTab_Button"), model_->profile()); - TabContents* selected_tab = model_->GetSelectedTabContents(); - if (!selected_tab) - return; - - Browser* browser = selected_tab->delegate()->GetBrowser(); - if (browser->OpenAppsPanelAsNewTab()) + if (browser_ && browser_->OpenAppsPanelAsNewTab()) return; model_->delegate()->AddBlankTab(true); @@ -368,7 +365,13 @@ void BrowserTabStripController::SetTabRendererDataFromModel( TabContents* contents, int model_index, TabRendererData* data) { - SkBitmap* app_icon = contents->GetExtensionAppIcon(); + SkBitmap* app_icon = NULL; + + // Extension App icons are slightly larger than favicons, so only allow + // them if permitted by the model. + if (model_->delegate()->LargeIconsPermitted()) + app_icon = contents->GetExtensionAppIcon(); + if (app_icon) data->favicon = *app_icon; else diff --git a/chrome/browser/views/tabs/browser_tab_strip_controller.h b/chrome/browser/views/tabs/browser_tab_strip_controller.h index 662a0c1..e900413 100644 --- a/chrome/browser/views/tabs/browser_tab_strip_controller.h +++ b/chrome/browser/views/tabs/browser_tab_strip_controller.h @@ -13,6 +13,7 @@ class BaseTab; class BaseTabStrip; +class Browser; struct TabRendererData; @@ -22,7 +23,7 @@ class BrowserTabStripController : public TabStripController, public TabStripModelObserver, public NotificationObserver { public: - explicit BrowserTabStripController(TabStripModel* model); + BrowserTabStripController(Browser* browser, TabStripModel* model); virtual ~BrowserTabStripController(); void InitFromModel(BaseTabStrip* tabstrip); @@ -104,6 +105,9 @@ class BrowserTabStripController : public TabStripController, BaseTabStrip* tabstrip_; + // Non-owning pointer to the browser which is using this controller. + Browser* browser_; + // If non-NULL it means we're showing a menu for the tab. scoped_ptr<TabContextMenuContents> context_menu_contents_; |