diff options
author | erikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-11 15:16:45 +0000 |
---|---|---|
committer | erikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-11 15:16:45 +0000 |
commit | adc2ccf7987a58fb73f2749d98cd49aae56c3700 (patch) | |
tree | a93b3de0ef8455799068ee77ce907a2635ccd033 /chrome/browser | |
parent | 6c3b5326b5e35d548f96496810164e596d7b210e (diff) | |
download | chromium_src-adc2ccf7987a58fb73f2749d98cd49aae56c3700.zip chromium_src-adc2ccf7987a58fb73f2749d98cd49aae56c3700.tar.gz chromium_src-adc2ccf7987a58fb73f2749d98cd49aae56c3700.tar.bz2 |
add mole collapse/expand events. convert mappy to use this.
BUG=15494
TEST=browser_tests.exe --gtest_filter=ExtensionApiTest.Toolstrip
Review URL: http://codereview.chromium.org/203023
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25976 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
4 files changed, 96 insertions, 0 deletions
diff --git a/chrome/browser/extensions/extension_shelf_model.cc b/chrome/browser/extensions/extension_shelf_model.cc index b2dbb9b..5a6db01 100644 --- a/chrome/browser/extensions/extension_shelf_model.cc +++ b/chrome/browser/extensions/extension_shelf_model.cc @@ -9,7 +9,9 @@ #include "chrome/browser/profile.h" #include "chrome/browser/extensions/extension_host.h" #include "chrome/browser/extensions/extension_process_manager.h" +#include "chrome/browser/extensions/extension_toolstrip_api.h" #include "chrome/browser/extensions/extensions_service.h" +#include "chrome/browser/renderer_host/render_view_host.h" #include "chrome/common/extensions/extension.h" #include "chrome/common/notification_service.h" @@ -132,6 +134,10 @@ void ExtensionShelfModel::ExpandToolstrip(iterator toolstrip, toolstrip->url = url; FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_, ToolstripChanged(toolstrip)); + int routing_id = toolstrip->host->render_view_host()->routing_id(); + ToolstripEventRouter::OnToolstripExpanded(browser_->profile(), + routing_id, + url, height); } void ExtensionShelfModel::CollapseToolstrip(iterator toolstrip, @@ -142,6 +148,10 @@ void ExtensionShelfModel::CollapseToolstrip(iterator toolstrip, toolstrip->url = url; FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_, ToolstripChanged(toolstrip)); + int routing_id = toolstrip->host->render_view_host()->routing_id(); + ToolstripEventRouter::OnToolstripCollapsed(browser_->profile(), + routing_id, + url); } void ExtensionShelfModel::Observe(NotificationType type, diff --git a/chrome/browser/extensions/extension_toolstrip_api.cc b/chrome/browser/extensions/extension_toolstrip_api.cc index 8f70243..a502dca 100644 --- a/chrome/browser/extensions/extension_toolstrip_api.cc +++ b/chrome/browser/extensions/extension_toolstrip_api.cc @@ -4,16 +4,24 @@ #include "chrome/browser/extensions/extension_toolstrip_api.h" +#include "base/json_writer.h" #include "chrome/browser/browser.h" #include "chrome/browser/extensions/extension_host.h" +#include "chrome/browser/extensions/extension_message_service.h" #include "chrome/browser/extensions/extension_shelf_model.h" #include "chrome/browser/extensions/extension_tabs_module_constants.h" +#include "chrome/browser/profile.h" namespace extension_toolstrip_api_functions { const char kExpandFunction[] = "toolstrip.expand"; const char kCollapseFunction[] = "toolstrip.collapse"; }; // namespace extension_toolstrip_api_functions +namespace extension_toolstrip_api_events { +const char kOnToolstripExpanded[] = "toolstrip.onExpanded.%d"; +const char kOnToolstripCollapsed[] = "toolstrip.onCollapsed.%d"; +}; // namespace extension_toolstrip_api_events + namespace { // Errors. const char kNotAToolstripError[] = "This page is not a toolstrip."; @@ -28,6 +36,7 @@ const int kMaxHeight = 1000; }; // namespace namespace keys = extension_tabs_module_constants; +namespace events = extension_toolstrip_api_events; bool ToolstripFunction::RunImpl() { ExtensionHost* host = dispatcher()->GetExtensionHost(); @@ -119,3 +128,43 @@ bool ToolstripCollapseFunction::RunImpl() { model_->CollapseToolstrip(toolstrip_, url); return true; } + +// static +void ToolstripEventRouter::DispatchEvent(Profile *profile, + int routing_id, + const char *event_name, + const Value& json) { + if (profile->GetExtensionMessageService()) { + std::string json_args; + JSONWriter::Write(&json, false, &json_args); + std::string full_event_name = StringPrintf(event_name, routing_id); + profile->GetExtensionMessageService()-> + DispatchEventToRenderers(full_event_name, json_args); + } +} + +// static +void ToolstripEventRouter::OnToolstripExpanded(Profile* profile, + int routing_id, + const GURL &url, + int height) { + ListValue args; + DictionaryValue* obj = new DictionaryValue(); + if (!url.is_empty()) + obj->SetString(keys::kUrlKey, url.spec()); + obj->SetInteger(keys::kHeightKey, height); + args.Append(obj); + DispatchEvent(profile, routing_id, events::kOnToolstripExpanded, args); +} + +// static +void ToolstripEventRouter::OnToolstripCollapsed(Profile* profile, + int routing_id, + const GURL &url) { + ListValue args; + DictionaryValue* obj = new DictionaryValue(); + if (!url.is_empty()) + obj->SetString(keys::kUrlKey, url.spec()); + args.Append(obj); + DispatchEvent(profile, routing_id, events::kOnToolstripCollapsed, args); +} diff --git a/chrome/browser/extensions/extension_toolstrip_api.h b/chrome/browser/extensions/extension_toolstrip_api.h index 127c952..a21e627 100644 --- a/chrome/browser/extensions/extension_toolstrip_api.h +++ b/chrome/browser/extensions/extension_toolstrip_api.h @@ -8,12 +8,19 @@ #include "chrome/browser/extensions/extension_function.h" #include "chrome/browser/extensions/extension_shelf_model.h" +class Profile; + // Function names. namespace extension_toolstrip_api_functions { extern const char kExpandFunction[]; extern const char kCollapseFunction[]; }; // namespace extension_toolstrip_api_functions +namespace extension_toolstrip_api_events { + extern const char kOnToolstripExpanded[]; + extern const char kOnToolstripCollapsed[]; +}; // namespace extension_toolstrip_api_events + class ToolstripFunction : public SyncExtensionFunction { protected: virtual bool RunImpl(); @@ -30,4 +37,25 @@ class ToolstripCollapseFunction : public ToolstripFunction { virtual bool RunImpl(); }; +class ToolstripEventRouter { + public: + // Toolstrip events. + static void OnToolstripExpanded(Profile* profile, + int routing_id, + const GURL& url, + int height); + static void OnToolstripCollapsed(Profile* profile, + int routing_id, + const GURL& url); + + private: + // Helper to actually dispatch an event to extension listeners. + static void DispatchEvent(Profile* profile, + int routing_id, + const char* event_name, + const Value& json); + + DISALLOW_COPY_AND_ASSIGN(ToolstripEventRouter); +}; + #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_TOOLSTRIP_API_H_ diff --git a/chrome/browser/extensions/extension_toolstrip_apitest.cc b/chrome/browser/extensions/extension_toolstrip_apitest.cc new file mode 100644 index 0000000..5e302db --- /dev/null +++ b/chrome/browser/extensions/extension_toolstrip_apitest.cc @@ -0,0 +1,9 @@ +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/extensions/extension_apitest.h" + +IN_PROC_BROWSER_TEST_F(ExtensionApiTest, Toolstrip) { + ASSERT_TRUE(RunExtensionTest("toolstrip")) << message_; +} |