diff options
Diffstat (limited to 'chrome/browser/extensions/extension_host.cc')
-rw-r--r-- | chrome/browser/extensions/extension_host.cc | 65 |
1 files changed, 46 insertions, 19 deletions
diff --git a/chrome/browser/extensions/extension_host.cc b/chrome/browser/extensions/extension_host.cc index c483070..2a19667 100644 --- a/chrome/browser/extensions/extension_host.cc +++ b/chrome/browser/extensions/extension_host.cc @@ -8,6 +8,7 @@ #include "base/string_util.h" #include "chrome/browser/browser.h" #include "chrome/browser/browser_list.h" +#include "chrome/browser/browser_theme_provider.h" #include "chrome/browser/debugger/devtools_manager.h" #include "chrome/browser/extensions/extension_message_service.h" #include "chrome/browser/extensions/extension_tabs_module.h" @@ -36,6 +37,8 @@ using WebKit::WebDragOperationsMask; // static bool ExtensionHost::enable_dom_automation_ = false; +static const char* kToolstripTextColorSubstitution = "$TEXT_COLOR$"; + ExtensionHost::ExtensionHost(Extension* extension, SiteInstance* site_instance, const GURL& url, ViewType::Type host_type) : extension_(extension), @@ -150,33 +153,57 @@ void ExtensionHost::DidNavigate(RenderViewHost* render_view_host, new ExtensionFunctionDispatcher(render_view_host_, this, url_)); } -void ExtensionHost::DidStopLoading(RenderViewHost* render_view_host) { - static const base::StringPiece toolstrip_css( - ResourceBundle::GetSharedInstance().GetRawDataResource( - IDR_EXTENSIONS_TOOLSTRIP_CSS)); +void ExtensionHost::InsertCssIfToolstrip() { #if defined(TOOLKIT_VIEWS) ExtensionView* view = view_.get(); - if (view) { - // 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. - if (view->is_toolstrip()) { - render_view_host->InsertCSSInWebFrame(L"", toolstrip_css.as_string()); - } else { - // No CSS injecting currently, but call SetDidInsertCSS to tell the view - // that it's OK to display. - view->SetDidInsertCSS(true); - } + 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) ExtensionViewGtk* view = view_.get(); - if (view && view->is_toolstrip()) { - render_view_host->InsertCSSInWebFrame(L"", toolstrip_css.as_string()); + if (!view || !view->is_toolstrip()) + return; +#endif + + static const base::StringPiece toolstrip_css( + ResourceBundle::GetSharedInstance().GetRawDataResource( + IDR_EXTENSIONS_TOOLSTRIP_CSS)); + + std::string css = toolstrip_css.as_string(); + ThemeProvider* theme_provider = + render_view_host()->process()->profile()->GetThemeProvider(); + + SkColor text_color = theme_provider ? + theme_provider->GetColor(BrowserThemeProvider::COLOR_BOOKMARK_TEXT) : + SK_ColorBLACK; + + std::string hex_color_string = StringPrintf( + "#%02x%02x%02x", SkColorGetR(text_color), + SkColorGetG(text_color), + SkColorGetB(text_color)); + size_t pos = css.find(kToolstripTextColorSubstitution); + while (pos != std::string::npos) { + css.replace(pos, 12, hex_color_string); + pos = css.find(kToolstripTextColorSubstitution); } + +#if defined(TOOLKIT_VIEWS) || defined(OS_LINUX) + // 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"); #endif +} +void ExtensionHost::DidStopLoading(RenderViewHost* render_view_host) { + InsertCssIfToolstrip(); if (!did_stop_loading_) { NotificationService::current()->Notify( NotificationType::EXTENSION_HOST_DID_STOP_LOADING, |