summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorerikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-11 15:16:45 +0000
committererikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-11 15:16:45 +0000
commitadc2ccf7987a58fb73f2749d98cd49aae56c3700 (patch)
treea93b3de0ef8455799068ee77ce907a2635ccd033 /chrome/browser
parent6c3b5326b5e35d548f96496810164e596d7b210e (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/extensions/extension_shelf_model.cc10
-rw-r--r--chrome/browser/extensions/extension_toolstrip_api.cc49
-rw-r--r--chrome/browser/extensions/extension_toolstrip_api.h28
-rw-r--r--chrome/browser/extensions/extension_toolstrip_apitest.cc9
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_;
+}