diff options
author | erikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-18 22:29:32 +0000 |
---|---|---|
committer | erikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-18 22:29:32 +0000 |
commit | 07442307cd72bbe129cb87887438e82f146c0773 (patch) | |
tree | 4a526daa929741242fe2a29af1d106cc8e4cc1e3 /chrome/browser | |
parent | 032b2c892ef67add767aa56dcf4f05b06f1f3d15 (diff) | |
download | chromium_src-07442307cd72bbe129cb87887438e82f146c0773.zip chromium_src-07442307cd72bbe129cb87887438e82f146c0773.tar.gz chromium_src-07442307cd72bbe129cb87887438e82f146c0773.tar.bz2 |
Change the view mode when switching between moles and toolstrips, and
propogate this into the class of the document element so that it's
possible to use CSS rules to control the display of your toolstrip/mole.
BUG=21939,15494
TEST=run the Mappy extension and verify it can open and close
Review URL: http://codereview.chromium.org/208020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@26635 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/browser_resources.grd | 2 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_host.cc | 55 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_host.h | 8 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_shelf_model.cc | 2 | ||||
-rw-r--r-- | chrome/browser/renderer_host/render_view_host.cc | 4 | ||||
-rw-r--r-- | chrome/browser/renderer_host/render_view_host.h | 3 | ||||
-rw-r--r-- | chrome/browser/resources/extensions_toolstrip.css | 95 | ||||
-rw-r--r-- | chrome/browser/resources/extensions_toolstrip_theme.css | 8 | ||||
-rw-r--r-- | chrome/browser/views/extensions/extension_shelf.cc | 2 | ||||
-rw-r--r-- | chrome/browser/views/extensions/extension_view.cc | 8 | ||||
-rw-r--r-- | chrome/browser/views/extensions/extension_view.h | 6 |
11 files changed, 51 insertions, 142 deletions
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd index 788d62d..7e07058 100644 --- a/chrome/browser/browser_resources.grd +++ b/chrome/browser/browser_resources.grd @@ -41,7 +41,7 @@ without changes to the corresponding grd file. fb03 --> <include name="IDR_LOCAL_STRINGS_JS" file="resources\local_strings.js" type="BINDATA" /> <include name="IDR_DOM_UI_CSS" file="resources\dom_ui.css" flattenhtml="true" type="BINDATA" /> <include name="IDR_EXTENSIONS_UI_HTML" file="resources\extensions_ui.html" flattenhtml="true" type="BINDATA" /> - <include name="IDR_EXTENSIONS_TOOLSTRIP_CSS" file="resources\extensions_toolstrip.css" flattenhtml="true" type="BINDATA" /> + <include name="IDR_EXTENSIONS_TOOLSTRIP_THEME_CSS" file="resources\extensions_toolstrip_theme.css" flattenhtml="true" type="BINDATA" /> <include name="IDR_PRINT_TAB_HTML" file="resources\print_tab.html" flattenhtml="true" type="BINDATA" /> <include name="IDR_PRINT_TAB_CSS" file="resources\print_tab.css" type="BINDATA" /> <include name="IDR_PRINT_TAB_JS" file="resources\print_tab.js" type="BINDATA" /> diff --git a/chrome/browser/extensions/extension_host.cc b/chrome/browser/extensions/extension_host.cc index f8503f3..a23c886 100644 --- a/chrome/browser/extensions/extension_host.cc +++ b/chrome/browser/extensions/extension_host.cc @@ -180,32 +180,12 @@ void ExtensionHost::DidNavigate(RenderViewHost* render_view_host, new ExtensionFunctionDispatcher(render_view_host_, this, url_)); } -void ExtensionHost::InsertCssIfToolstrip() { - - // TODO(erikkay): Make these ifdefs go away -- http://crbug.com/21939 -#if defined(TOOLKIT_VIEWS) - ExtensionView* view = view_.get(); - if (!view) - return; - if (!view->is_toolstrip()) { - // No CSS injecting currently, but call SetDidInsertCSS to tell the view - // that it's OK to display. - view->SetDidInsertCSS(true); - return; - } -#elif defined(OS_LINUX) || defined(OS_MACOSX) -#if defined(OS_LINUX) - ExtensionViewGtk* view = view_.get(); -#else - ExtensionViewMac* view = view_.get(); -#endif - if (!view || !view->is_toolstrip()) - return; -#endif +void ExtensionHost::InsertThemeCSS() { + DCHECK(!is_background_page()); static const base::StringPiece toolstrip_css( ResourceBundle::GetSharedInstance().GetRawDataResource( - IDR_EXTENSIONS_TOOLSTRIP_CSS)); + IDR_EXTENSIONS_TOOLSTRIP_THEME_CSS)); std::string css = toolstrip_css.as_string(); ThemeProvider* theme_provider = @@ -225,16 +205,12 @@ void ExtensionHost::InsertCssIfToolstrip() { pos = css.find(kToolstripTextColorSubstitution); } - // TODO(erikkay) this injection should really happen in the renderer. - // When the Jerry's view type change lands, investigate moving this there. - // As a toolstrip, inject our toolstrip CSS to make it easier for toolstrips // to blend in with the chrome UI. - render_view_host()->InsertCSSInWebFrame(L"", css, "ToolstripDefaultCss"); + render_view_host()->InsertCSSInWebFrame(L"", css, "ToolstripThemeCSS"); } void ExtensionHost::DidStopLoading(RenderViewHost* render_view_host) { - InsertCssIfToolstrip(); if (!did_stop_loading_) { NotificationService::current()->Notify( NotificationType::EXTENSION_HOST_DID_STOP_LOADING, @@ -242,12 +218,21 @@ void ExtensionHost::DidStopLoading(RenderViewHost* render_view_host) { Details<ExtensionHost>(this)); did_stop_loading_ = true; } + if (extension_host_type_ == ViewType::EXTENSION_TOOLSTRIP || + extension_host_type_ == ViewType::EXTENSION_MOLE) { +#if defined(TOOLKIT_VIEWS) + if (view_.get()) + view_->DidStopLoading(); +#endif + } } void ExtensionHost::DocumentAvailableInMainFrame(RenderViewHost* rvh) { document_element_available_ = true; if (is_background_page()) extension_->SetBackgroundPageReady(); + else + InsertThemeCSS(); } void ExtensionHost::RunJavaScriptMessage(const std::wstring& message, @@ -278,13 +263,6 @@ void ExtensionHost::ProcessDOMUIMessage(const std::string& message, } } -void ExtensionHost::DidInsertCSS() { -#if defined(TOOLKIT_VIEWS) - if (view_.get()) - view_->SetDidInsertCSS(true); -#endif -} - RenderViewHostDelegate::View* ExtensionHost::GetViewDelegate() { return this; } @@ -391,6 +369,13 @@ Browser* ExtensionHost::GetBrowser() { return browser; } +void ExtensionHost::SetRenderViewType(ViewType::Type type) { + DCHECK(type == ViewType::EXTENSION_MOLE || + type == ViewType::EXTENSION_TOOLSTRIP); + extension_host_type_ = type; + render_view_host()->ViewTypeChanged(extension_host_type_); +} + ViewType::Type ExtensionHost::GetRenderViewType() const { return extension_host_type_; } diff --git a/chrome/browser/extensions/extension_host.h b/chrome/browser/extensions/extension_host.h index 49a75f1..3b3d64e 100644 --- a/chrome/browser/extensions/extension_host.h +++ b/chrome/browser/extensions/extension_host.h @@ -69,6 +69,9 @@ class ExtensionHost : public RenderViewHostDelegate, return document_element_available_; } + // Sets the the ViewType of this host (e.g. mole, toolstrip). + void SetRenderViewType(ViewType::Type type); + // Returns true if the render view is initialized and didn't crash. bool IsRenderViewLive() const; @@ -80,8 +83,8 @@ class ExtensionHost : public RenderViewHostDelegate, // Sets |url_| and navigates |render_view_host_|. void NavigateToURL(const GURL& url); - // Insert the CSS for a toolstrip. - void InsertCssIfToolstrip(); + // Insert the theme CSS for a toolstrip/mole. + void InsertThemeCSS(); // RenderViewHostDelegate implementation. virtual RenderViewHostDelegate::View* GetViewDelegate(); @@ -106,7 +109,6 @@ class ExtensionHost : public RenderViewHostDelegate, const int flags, IPC::Message* reply_msg, bool* did_suppress_message); - virtual void DidInsertCSS(); // RenderViewHostDelegate::View virtual void CreateNewWindow(int route_id, diff --git a/chrome/browser/extensions/extension_shelf_model.cc b/chrome/browser/extensions/extension_shelf_model.cc index 5a6db01..10b56b2 100644 --- a/chrome/browser/extensions/extension_shelf_model.cc +++ b/chrome/browser/extensions/extension_shelf_model.cc @@ -138,6 +138,7 @@ void ExtensionShelfModel::ExpandToolstrip(iterator toolstrip, ToolstripEventRouter::OnToolstripExpanded(browser_->profile(), routing_id, url, height); + toolstrip->host->SetRenderViewType(ViewType::EXTENSION_MOLE); } void ExtensionShelfModel::CollapseToolstrip(iterator toolstrip, @@ -152,6 +153,7 @@ void ExtensionShelfModel::CollapseToolstrip(iterator toolstrip, ToolstripEventRouter::OnToolstripCollapsed(browser_->profile(), routing_id, url); + toolstrip->host->SetRenderViewType(ViewType::EXTENSION_TOOLSTRIP); } void ExtensionShelfModel::Observe(NotificationType type, diff --git a/chrome/browser/renderer_host/render_view_host.cc b/chrome/browser/renderer_host/render_view_host.cc index 63cc15e..41a30f2 100644 --- a/chrome/browser/renderer_host/render_view_host.cc +++ b/chrome/browser/renderer_host/render_view_host.cc @@ -1660,6 +1660,10 @@ void RenderViewHost::BlockExtensionRequest(int request_id) { "Access to extension API denied."); } +void RenderViewHost::ViewTypeChanged(ViewType::Type type) { + Send(new ViewMsg_NotifyRenderViewType(routing_id(), type)); +} + void RenderViewHost::OnExtensionPostMessage( int port_id, const std::string& message) { if (process()->profile()->GetExtensionMessageService()) { diff --git a/chrome/browser/renderer_host/render_view_host.h b/chrome/browser/renderer_host/render_view_host.h index b7f2d86..cbf0f73 100644 --- a/chrome/browser/renderer_host/render_view_host.h +++ b/chrome/browser/renderer_host/render_view_host.h @@ -436,6 +436,9 @@ class RenderViewHost : public RenderWidgetHost, // permission. void BlockExtensionRequest(int request_id); + // Notify the renderer that its view type has changed. + void ViewTypeChanged(ViewType::Type type); + void SignalModalDialogEvent(); void ResetModalDialogEvent(); diff --git a/chrome/browser/resources/extensions_toolstrip.css b/chrome/browser/resources/extensions_toolstrip.css deleted file mode 100644 index cb23825..0000000 --- a/chrome/browser/resources/extensions_toolstrip.css +++ /dev/null @@ -1,95 +0,0 @@ -/** - * Body styles. This makes the toolstrip layout fit in with the Windows - * bookmarkbar. Note that the background is provided separately, by - * RenderWidget. - */ -body { - display:-webkit-box; - -webkit-box-orient:horizontal; - -webkit-box-align:center; - white-space:nowrap; - overflow: hidden; - margin: 0; - padding:0; - font: menu; - color: $TEXT_COLOR$; - -webkit-user-select:none; - cursor:default; -} - -/** - * This, combined with -webkit-box-align:center on body, makes content inside - * the body tag center itself vertically by default. - */ -body>* { - display:-webkit-box; -} - -/** - * Set display property of <script> and <style> as none explicitly to avoid - * inheriting from <body>. - */ -body>script, -body>style { - display:none; -} - -/** - * Toolstrip Buttons. The following styles make - * <div class="toolstrip-button"><img><span>Woot</span></div> look like the - * bookmarkbar buttons on Windows. - * - * TODO(aa): We may have to come up with a way to modify these slightly on - * different platforms. - * - * TODO(aa): It would be nice if we could use actual <button> tags work here, - * which should work once https://bugs.webkit.org/show_bug.cgi?id=25406 is - * fixed. - */ -div.toolstrip-button { - -webkit-box-orient:horizontal; - -webkit-box-align:center; - border:6px solid transparent; - font:menu; - background:transparent; - color: $TEXT_COLOR$; - line-height:100%; - padding:0; -} - -div.toolstrip-button>img { - display:-webkit-box; - width:16px; - height:16px; - /** - * We inset the image slightly vertically, so that the button can be shorter - * than would otherwise be possibe with our fat borders. - */ - margin:-1px 5px -1px 0; -} - -div.toolstrip-button>span { - display:-webkit-box; - margin-right:1px; - /** - * Hack: WebKit appears to measure text height slightly differently than we do - * in native code, making us not line up when centering, so we shift ourselves - * up one pixel to match. - */ - margin-top:-1px; -} - -/** - * TODO(aa): It would be nice if these border images could be stored in Chrome - * as, normal images even if those images are just translated into data URLs at - * runtime. - */ -div.toolstrip-button:hover { - border-width:6px; - -webkit-border-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAaCAYAAACHD21cAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVRJREFUeNpi/P//PwMjIyMfAwODEhsbmworKxvD79+/GED0jx/fGf7+/csABT+A+B4Q3wLq+cME0sTMzOzW1dOncuX6bYZnL98wvH73CUy/+/iV4eOXH2B86+5DjoLCYi2gxgCwHiBDs7O7Vyg9I4uBh4eHARcAyTk6OTMICQkx7N61U5kJKCZqY2PLQCyAqv3ICCSCgE5jAvqPKI2/fv1iEBXiYwDZSLQmEACpBYYJWCNZgCyNoChi4uTkpJ+N9NdIdqhycHCSpxGUCcj3IygJkQpAWY6k5AbPmMB8yvT9+3f6BQ7YRrKTHMijZCVyUJyQGrLglAPSffvWTaI13bhxHWIj0LbLq1auIFoj1JKnoFLu44kTxzVAhY+goCCDmJg4TpuWL1vKkJOV8RTIvcsILZA5QAUy0O1aoDgC+RuWQkDg69cvIOoTEL8AFcpAPV8AAgwAn6qHYvNUlBEAAAAASUVORK5CYII=) 6 round round; -} - -div.toolstrip-button:active { - border-width:6px; - -webkit-border-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAaCAYAAACHD21cAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAbhJREFUeNqcVDtPwmAU/R6tCUZsIw5AKODoYNREBNREiAb9t+qoRmDxBYOYOGGiVAexaGzDUJK2X70fFURjUtuztfeennMfvdh1XTTCer5AKKUEY8zgkULMvrw4/06YAObE3Hoep1KppWx2YVqSZQTkcbLjOJgxhnX9Az0+PLx3uy/tZqOBBB5MJpNLO7sVobK3/yZJEotEIj9UTNPEmvZK67Va9PTkeHllZfWW8EBKUaa2S6V+PB53fpM4+LtMJmuXyuW+klbEVusGDYmxuZggSTJDPuA5PDdfKHpE6AiSZX8iz+G5hBBMUEB8NQ4LEw//BoyIkY3NLRqExMdT3Nj0xhEUoIgIColQzQGrOJQi7DINa5WFrxH+DhaGR8I0aGgVZuKEVQwMKM8JvHJjST4TSgU3qCiBe+IMBibRdd3XNj8hlmXxSRBi27bb62msp2m+lg3DIIau2yDGSLNxzZ5UVa/Xq7P37bbIv/qXkqp2hOrZafT5+Qk1rq+887iWy6FEIrmYzmRmYrF5QRRF5i20VzuUQuE82mqnYx4dHtyN7+oI/L4KAGiYM1pmHgdn1tXlxQ8XnwIMABNlyWs2CMVlAAAAAElFTkSuQmCC) 6 round round; -} diff --git a/chrome/browser/resources/extensions_toolstrip_theme.css b/chrome/browser/resources/extensions_toolstrip_theme.css new file mode 100644 index 0000000..d4691fc --- /dev/null +++ b/chrome/browser/resources/extensions_toolstrip_theme.css @@ -0,0 +1,8 @@ +/** + * The following style rules affect toolstrips and moles and are affected by + * theme changes. + */ + +body { + color: $TEXT_COLOR$; +} diff --git a/chrome/browser/views/extensions/extension_shelf.cc b/chrome/browser/views/extensions/extension_shelf.cc index a3ac3bf..229d697 100644 --- a/chrome/browser/views/extensions/extension_shelf.cc +++ b/chrome/browser/views/extensions/extension_shelf.cc @@ -740,7 +740,7 @@ void ExtensionShelf::ThemeChanged() { // Refresh the CSS to update toolstrip text colors from theme. int count = model_->count(); for (int i = 0; i < count; ++i) - ToolstripAtIndex(i)->view()->host()->InsertCssIfToolstrip(); + ToolstripAtIndex(i)->view()->host()->InsertThemeCSS(); Layout(); } diff --git a/chrome/browser/views/extensions/extension_view.cc b/chrome/browser/views/extensions/extension_view.cc index 7b39336..4302c93 100644 --- a/chrome/browser/views/extensions/extension_view.cc +++ b/chrome/browser/views/extensions/extension_view.cc @@ -15,7 +15,7 @@ ExtensionView::ExtensionView(ExtensionHost* host, Browser* browser) : host_(host), browser_(browser), initialized_(false), pending_preferred_width_(0), container_(NULL), - did_insert_css_(false), is_clipped_(false), is_toolstrip_(true) { + did_stop_loading_(false), is_clipped_(false), is_toolstrip_(true) { host_->set_view(this); } @@ -34,8 +34,8 @@ RenderViewHost* ExtensionView::render_view_host() const { return host_->render_view_host(); } -void ExtensionView::SetDidInsertCSS(bool did_insert) { - did_insert_css_ = did_insert; +void ExtensionView::DidStopLoading() { + did_stop_loading_ = true; ShowIfCompletelyLoaded(); } @@ -100,7 +100,7 @@ void ExtensionView::ShowIfCompletelyLoaded() { // given us a background and css has been inserted into page. These can happen // in different orders. if (!IsVisible() && host_->did_stop_loading() && render_view_host()->view() && - !is_clipped_ && did_insert_css_ && + !is_clipped_ && did_stop_loading_ && !render_view_host()->view()->background().empty()) { SetVisible(true); UpdatePreferredWidth(pending_preferred_width_); diff --git a/chrome/browser/views/extensions/extension_view.h b/chrome/browser/views/extensions/extension_view.h index 1e08f79..fc1ef90 100644 --- a/chrome/browser/views/extensions/extension_view.h +++ b/chrome/browser/views/extensions/extension_view.h @@ -36,7 +36,7 @@ class ExtensionView : public views::NativeViewHost { Browser* browser() const { return browser_; } Extension* extension() const; RenderViewHost* render_view_host() const; - void SetDidInsertCSS(bool did_insert); + void DidStopLoading(); void set_is_clipped(bool is_clipped) { is_clipped_ = is_clipped; } bool is_toolstrip() const { return is_toolstrip_; } void set_is_toolstrip(bool is) { is_toolstrip_ = is; } @@ -94,8 +94,8 @@ class ExtensionView : public views::NativeViewHost { // Note: the view does not own its container. ExtensionContainer* container_; - // Whether the RenderView has inserted extension css into toolstrip page. - bool did_insert_css_; + // Whether the RenderView has finished loading. + bool did_stop_loading_; // Whether this extension view is clipped. bool is_clipped_; |