diff options
author | mbelshe@google.com <mbelshe@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-18 22:51:17 +0000 |
---|---|---|
committer | mbelshe@google.com <mbelshe@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-18 22:51:17 +0000 |
commit | c130a214c64fd76d53783523a7c63a78848e4474 (patch) | |
tree | f018ecf50605be1376177655669e3f8c3afbaa42 | |
parent | 07442307cd72bbe129cb87887438e82f146c0773 (diff) | |
download | chromium_src-c130a214c64fd76d53783523a7c63a78848e4474.zip chromium_src-c130a214c64fd76d53783523a7c63a78848e4474.tar.gz chromium_src-c130a214c64fd76d53783523a7c63a78848e4474.tar.bz2 |
Revert 26635 - 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
TBR=erikkay@chromium.org
Review URL: http://codereview.chromium.org/210024
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@26636 0039d316-1c4b-4281-b951-d872f2087c98
19 files changed, 78 insertions, 177 deletions
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd index 7e07058..788d62d 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_THEME_CSS" file="resources\extensions_toolstrip_theme.css" flattenhtml="true" type="BINDATA" /> + <include name="IDR_EXTENSIONS_TOOLSTRIP_CSS" file="resources\extensions_toolstrip.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 a23c886..f8503f3 100644 --- a/chrome/browser/extensions/extension_host.cc +++ b/chrome/browser/extensions/extension_host.cc @@ -180,12 +180,32 @@ void ExtensionHost::DidNavigate(RenderViewHost* render_view_host, new ExtensionFunctionDispatcher(render_view_host_, this, url_)); } -void ExtensionHost::InsertThemeCSS() { - DCHECK(!is_background_page()); +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 static const base::StringPiece toolstrip_css( ResourceBundle::GetSharedInstance().GetRawDataResource( - IDR_EXTENSIONS_TOOLSTRIP_THEME_CSS)); + IDR_EXTENSIONS_TOOLSTRIP_CSS)); std::string css = toolstrip_css.as_string(); ThemeProvider* theme_provider = @@ -205,12 +225,16 @@ void ExtensionHost::InsertThemeCSS() { 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, "ToolstripThemeCSS"); + render_view_host()->InsertCSSInWebFrame(L"", css, "ToolstripDefaultCss"); } void ExtensionHost::DidStopLoading(RenderViewHost* render_view_host) { + InsertCssIfToolstrip(); if (!did_stop_loading_) { NotificationService::current()->Notify( NotificationType::EXTENSION_HOST_DID_STOP_LOADING, @@ -218,21 +242,12 @@ 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, @@ -263,6 +278,13 @@ 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; } @@ -369,13 +391,6 @@ 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 3b3d64e..49a75f1 100644 --- a/chrome/browser/extensions/extension_host.h +++ b/chrome/browser/extensions/extension_host.h @@ -69,9 +69,6 @@ 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; @@ -83,8 +80,8 @@ class ExtensionHost : public RenderViewHostDelegate, // Sets |url_| and navigates |render_view_host_|. void NavigateToURL(const GURL& url); - // Insert the theme CSS for a toolstrip/mole. - void InsertThemeCSS(); + // Insert the CSS for a toolstrip. + void InsertCssIfToolstrip(); // RenderViewHostDelegate implementation. virtual RenderViewHostDelegate::View* GetViewDelegate(); @@ -109,6 +106,7 @@ 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 10b56b2..5a6db01 100644 --- a/chrome/browser/extensions/extension_shelf_model.cc +++ b/chrome/browser/extensions/extension_shelf_model.cc @@ -138,7 +138,6 @@ void ExtensionShelfModel::ExpandToolstrip(iterator toolstrip, ToolstripEventRouter::OnToolstripExpanded(browser_->profile(), routing_id, url, height); - toolstrip->host->SetRenderViewType(ViewType::EXTENSION_MOLE); } void ExtensionShelfModel::CollapseToolstrip(iterator toolstrip, @@ -153,7 +152,6 @@ 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 41a30f2..63cc15e 100644 --- a/chrome/browser/renderer_host/render_view_host.cc +++ b/chrome/browser/renderer_host/render_view_host.cc @@ -1660,10 +1660,6 @@ 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 cbf0f73..b7f2d86 100644 --- a/chrome/browser/renderer_host/render_view_host.h +++ b/chrome/browser/renderer_host/render_view_host.h @@ -436,9 +436,6 @@ 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/renderer/resources/extensions_toolstrip.css b/chrome/browser/resources/extensions_toolstrip.css index cb99470..cb23825 100644 --- a/chrome/renderer/resources/extensions_toolstrip.css +++ b/chrome/browser/resources/extensions_toolstrip.css @@ -12,6 +12,7 @@ body { margin: 0; padding:0; font: menu; + color: $TEXT_COLOR$; -webkit-user-select:none; cursor:default; } @@ -51,6 +52,7 @@ div.toolstrip-button { border:6px solid transparent; font:menu; background:transparent; + color: $TEXT_COLOR$; line-height:100%; padding:0; } diff --git a/chrome/browser/resources/extensions_toolstrip_theme.css b/chrome/browser/resources/extensions_toolstrip_theme.css deleted file mode 100644 index d4691fc..0000000 --- a/chrome/browser/resources/extensions_toolstrip_theme.css +++ /dev/null @@ -1,8 +0,0 @@ -/** - * 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 229d697..a3ac3bf 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()->InsertThemeCSS(); + ToolstripAtIndex(i)->view()->host()->InsertCssIfToolstrip(); Layout(); } diff --git a/chrome/browser/views/extensions/extension_view.cc b/chrome/browser/views/extensions/extension_view.cc index 4302c93..7b39336 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_stop_loading_(false), is_clipped_(false), is_toolstrip_(true) { + did_insert_css_(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::DidStopLoading() { - did_stop_loading_ = true; +void ExtensionView::SetDidInsertCSS(bool did_insert) { + did_insert_css_ = did_insert; 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_stop_loading_ && + !is_clipped_ && did_insert_css_ && !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 fc1ef90..1e08f79 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 DidStopLoading(); + void SetDidInsertCSS(bool did_insert); 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 finished loading. - bool did_stop_loading_; + // Whether the RenderView has inserted extension css into toolstrip page. + bool did_insert_css_; // Whether this extension view is clipped. bool is_clipped_; diff --git a/chrome/common/view_types.h b/chrome/common/view_types.h index 7272250..4151fdd 100755 --- a/chrome/common/view_types.h +++ b/chrome/common/view_types.h @@ -14,7 +14,6 @@ class ViewType { INVALID, TAB_CONTENTS, EXTENSION_TOOLSTRIP, - EXTENSION_MOLE, EXTENSION_BACKGROUND_PAGE, DEV_TOOLS_UI, INTERSTITIAL_PAGE, diff --git a/chrome/renderer/extensions/extension_process_bindings.cc b/chrome/renderer/extensions/extension_process_bindings.cc index 0fc9438..7a9d0ac 100644 --- a/chrome/renderer/extensions/extension_process_bindings.cc +++ b/chrome/renderer/extensions/extension_process_bindings.cc @@ -28,7 +28,6 @@ using bindings_utils::GetPendingRequestMap; using bindings_utils::PendingRequest; using bindings_utils::PendingRequestMap; using bindings_utils::ExtensionBase; -using WebKit::WebFrame; namespace { @@ -120,25 +119,6 @@ class ExtensionImpl : public ExtensionBase { return v8::String::New(GetStringResource<IDR_EXTENSION_API_JSON>()); } - // Returns true is |type| "isa" |match|. - static bool ViewTypeMatches(ViewType::Type type, ViewType::Type match) { - if (type == match) - return true; - - // INVALID means match all. - if (match == ViewType::INVALID) - return true; - - // TODO(erikkay) for now, special case mole as a type of toolstrip. - // Perhaps this isn't the right long-term thing to do. - if (match == ViewType::EXTENSION_TOOLSTRIP && - type == ViewType::EXTENSION_MOLE) { - return true; - } - - return false; - } - static v8::Handle<v8::Value> GetExtensionViews(const v8::Arguments& args) { if (args.Length() != 2) return v8::Undefined(); @@ -155,8 +135,6 @@ class ExtensionImpl : public ExtensionBase { ViewType::Type view_type = ViewType::INVALID; if (view_type_string == "TOOLSTRIP") { view_type = ViewType::EXTENSION_TOOLSTRIP; - } else if (view_type_string == "MOLE") { - view_type = ViewType::EXTENSION_MOLE; } else if (view_type_string == "BACKGROUND") { view_type = ViewType::EXTENSION_BACKGROUND_PAGE; } else if (view_type_string == "TAB") { @@ -176,7 +154,7 @@ class ExtensionImpl : public ExtensionBase { std::set<RenderView* >::iterator it = render_view_set_pointer->render_view_set_.begin(); for (; it != render_view_set_pointer->render_view_set_.end(); ++it) { - if (!ViewTypeMatches((*it)->view_type(), view_type)) + if (view_type != ViewType::INVALID && (*it)->view_type() != view_type) continue; GURL url = (*it)->webview()->GetMainFrame()->url(); @@ -418,25 +396,3 @@ v8::Handle<v8::Value> return v8::ThrowException(v8::Exception::Error( v8::String::New(error_msg.c_str()))); } - -// static -void ExtensionProcessBindings::SetViewType(WebView* view, - ViewType::Type type) { - DCHECK(type == ViewType::EXTENSION_MOLE || - type == ViewType::EXTENSION_TOOLSTRIP); - const char* type_str; - if (type == ViewType::EXTENSION_MOLE) - type_str = "mole"; - else if (type == ViewType::EXTENSION_TOOLSTRIP) - type_str = "toolstrip"; - else - return; - - v8::HandleScope handle_scope; - WebFrame* frame = view->GetMainFrame(); - v8::Local<v8::Context> context = frame->mainWorldScriptContext(); - v8::Handle<v8::Value> argv[1]; - argv[0] = v8::String::New(type_str); - bindings_utils::CallFunctionInContext(context, "setViewType", - arraysize(argv), argv); -} diff --git a/chrome/renderer/extensions/extension_process_bindings.h b/chrome/renderer/extensions/extension_process_bindings.h index 1777658..bea3e91 100644 --- a/chrome/renderer/extensions/extension_process_bindings.h +++ b/chrome/renderer/extensions/extension_process_bindings.h @@ -11,12 +11,10 @@ #include <string> #include <vector> -#include "chrome/common/view_types.h" #include "v8/include/v8.h" class GURL; class URLPattern; -class WebView; class ExtensionProcessBindings { public: @@ -38,7 +36,7 @@ class ExtensionProcessBindings { // Sets the host permissions for a particular extension. static void SetHostPermissions(const GURL& extension_url, - const std::vector<URLPattern>& permissions); + const std::vector<URLPattern>& permissions); // Check if the extension in the currently running context has permission to // access the given extension function. Must be called with a valid V8 @@ -49,11 +47,6 @@ class ExtensionProcessBindings { // denied. Must be called with a valid V8 context in scope. static v8::Handle<v8::Value> ThrowPermissionDeniedException( const std::string& function_name); - - // For EXTENSION_* |type| values, adds/replaces a special class name on to - // the document element (e.g. "extension_toolstrip", "extension_mole") so - // that the page can use CSS rules to control its display appropriately. - static void SetViewType(WebView* view, ViewType::Type type); }; #endif // CHROME_RENDERER_EXTENSIONS_EXTENSION_PROCESS_BINDINGS_H_ diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index ad1514c..2e68db7 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -2080,11 +2080,6 @@ void RenderView::didCreateDocumentElement(WebFrame* frame) { RenderThread::current()->user_script_slave()->InjectScripts( frame, UserScript::DOCUMENT_START); } - if (view_type_ == ViewType::EXTENSION_TOOLSTRIP || - view_type_ == ViewType::EXTENSION_MOLE) { - InjectToolstripCSS(); - ExtensionProcessBindings::SetViewType(webview(), view_type_); - } while (!pending_code_execution_queue_.empty()) { scoped_refptr<CodeExecutionInfo> info = @@ -2979,15 +2974,6 @@ void RenderView::OnMediaPlayerActionAt(int x, } void RenderView::OnNotifyRendererViewType(ViewType::Type type) { - // When this is first set, the bindings aren't fully loaded. We only need - // to call through this API after the page has already been loaded. It's - // also called in didCreateDocumentElement to bootstrap. - if (view_type_ != ViewType::INVALID) { - if (type == ViewType::EXTENSION_MOLE || - type == ViewType::EXTENSION_TOOLSTRIP) { - ExtensionProcessBindings::SetViewType(webview(), type); - } - } view_type_ = type; } @@ -3263,17 +3249,6 @@ void RenderView::OnExtensionResponse(int request_id, request_id, success, response, error); } -void RenderView::InjectToolstripCSS() { - if (view_type_ != ViewType::EXTENSION_TOOLSTRIP) - return; - - static const base::StringPiece toolstrip_css( - ResourceBundle::GetSharedInstance().GetRawDataResource( - IDR_EXTENSIONS_TOOLSTRIP_CSS)); - std::string css = toolstrip_css.as_string(); - InsertCSS(L"", css, "ToolstripDefaultCSS"); -} - void RenderView::OnExtensionMessageInvoke(const std::string& function_name, const ListValue& args) { RendererExtensionBindings::Invoke(function_name, args, this); diff --git a/chrome/renderer/render_view.h b/chrome/renderer/render_view.h index 753ce12..b2b71a95 100644 --- a/chrome/renderer/render_view.h +++ b/chrome/renderer/render_view.h @@ -421,8 +421,6 @@ class RenderView : public RenderWidget, const std::string& response, const std::string& error); - void OnSetExtensionViewMode(const std::string& mode); - const WebPreferences& webkit_preferences() const { return webkit_preferences_; } @@ -718,9 +716,6 @@ class RenderView : public RenderWidget, void UpdateFontRenderingFromRendererPrefs() { } #endif - // Inject toolstrip CSS for extension moles and toolstrips. - void InjectToolstripCSS(); - // Initializes the document_tag_ member if necessary. void EnsureDocumentTag(); diff --git a/chrome/renderer/renderer_resources.grd b/chrome/renderer/renderer_resources.grd index 24e1118..50230d5 100644 --- a/chrome/renderer/renderer_resources.grd +++ b/chrome/renderer/renderer_resources.grd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- This comment is only here because changes to resources are not picked up -without changes to the corresponding grd file. ek1 --> +without changes to the corresponding grd file. rw2 --> <grit latest_public_release="0" current_release="1"> <outputs> <output filename="grit/renderer_resources.h" type="rc_header"> @@ -21,7 +21,6 @@ without changes to the corresponding grd file. ek1 --> <include name="IDR_RENDERER_EXTENSION_BINDINGS_JS" file="resources\renderer_extension_bindings.js" type="BINDATA" /> <include name="IDR_SAD_PLUGIN" file="resources\sadplugin.png" type="BINDATA" /> <include name="IDR_EXTENSION_APITEST_JS" file="resources\extension_apitest.js" type="BINDATA" /> - <include name="IDR_EXTENSIONS_TOOLSTRIP_CSS" file="resources\extensions_toolstrip.css" flattenhtml="true" type="BINDATA" /> </includes> </release> </grit> diff --git a/chrome/renderer/resources/extension_process_bindings.js b/chrome/renderer/resources/extension_process_bindings.js index 95e520e..657baec 100644 --- a/chrome/renderer/resources/extension_process_bindings.js +++ b/chrome/renderer/resources/extension_process_bindings.js @@ -115,24 +115,6 @@ var chrome = chrome || {}; } }; - chromeHidden.setViewType = function(type) { - var modeClass = "chrome-" + type; - var className = document.documentElement.className; - if (className && className.length) { - var classes = className.split(" "); - var new_classes = []; - classes.forEach(function(cls) { - if (cls.indexOf("chrome-") != 0) { - new_classes.push(cls); - } - }); - new_classes.push(modeClass); - document.documentElement.className = new_classes.join(" "); - } else { - document.documentElement.className = modeClass; - } - }; - function prepareRequest(args, argSchemas) { var request = {}; var argCount = args.length; @@ -174,6 +156,14 @@ var chrome = chrome || {}; request.callback ? true : false); } + // Using forEach for convenience, and to bind |module|s & |apiDefs|s via + // closures. + function forEach(a, f) { + for (var i = 0; i < a.length; i++) { + f(a[i], i); + } + } + function bind(obj, func) { return function() { return func.apply(obj, arguments); @@ -221,20 +211,20 @@ var chrome = chrome || {}; // for api functions that wish to insert themselves into the call. var apiDefinitions = JSON.parse(GetExtensionAPIDefinition()); - apiDefinitions.forEach(function(apiDef) { + forEach(apiDefinitions, function(apiDef) { chrome[apiDef.namespace] = chrome[apiDef.namespace] || {}; var module = chrome[apiDef.namespace]; // Add types to global validationTypes if (apiDef.types) { - apiDef.types.forEach(function(t) { + forEach(apiDef.types, function(t) { chromeHidden.validationTypes.push(t); }); } // Setup Functions. if (apiDef.functions) { - apiDef.functions.forEach(function(functionDef) { + forEach(apiDef.functions, function(functionDef) { // Module functions may have been defined earlier by hand. Don't // clobber them. if (module[functionDef.name]) @@ -259,7 +249,7 @@ var chrome = chrome || {}; // Setup Events if (apiDef.events) { - apiDef.events.forEach(function(eventDef) { + forEach(apiDef.events, function(eventDef) { // Module events may have been defined earlier by hand. Don't clobber // them. if (module[eventDef.name]) @@ -306,8 +296,8 @@ var chrome = chrome || {}; apiFunctions["devtools.getTabEvents"].handleRequest = function(tabId) { var tabIdProxy = {}; - var functions = ["onPageEvent", "onTabUrlChange", "onTabClose"]; - functions.forEach(function(name) { + forEach(["onPageEvent", "onTabUrlChange", "onTabClose"], + function(name) { // Event disambiguation is handled by name munging. See // chrome/browser/extensions/extension_devtools_events.h for the C++ // equivalent of this logic. diff --git a/chrome/test/data/extensions/samples/mappy/mappy_toolstrip.html b/chrome/test/data/extensions/samples/mappy/mappy_toolstrip.html index 88d1d52..9573344 100755 --- a/chrome/test/data/extensions/samples/mappy/mappy_toolstrip.html +++ b/chrome/test/data/extensions/samples/mappy/mappy_toolstrip.html @@ -1,21 +1,6 @@ <style> -.chrome-toolstrip #map { - display: none; -} - -.chrome-toolstrip #button { - display: block; -} - -.chrome-mole #map { - display: block; -} - -.chrome-mole #button { - display: none; -} - #map { + display: none; width: 512px; height: 512px; } @@ -25,9 +10,20 @@ <script> var maps_key = "ABQIAAAATfHumDbW3OmRByfquHd3SRTRERdeAiwZ9EeJWta3L_JZVS0bOBRQeZgr4K0xyVKzUdnnuFl8X9PX0w"; +chrome.toolstrip.onCollapsed.addListener(function() { + var map = document.getElementById("map"); + map.src = ""; + map.style.display = "none"; + var button = document.getElementById("button"); + button.style.display = "block"; +}); + function expand(url) { + var button = document.getElementById("button"); + button.style.display = "none"; var map = document.getElementById("map"); map.src = url; + map.style.display = "block"; chrome.toolstrip.expand({height:512}, function() {}); } |