Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(55)

Side by Side Diff: extensions/browser/event_router_unittest.cc

Issue 1606943005: Adds UMA for counting component event page wakeups. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « extensions/browser/event_router.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "extensions/browser/event_router.h" 5 #include "extensions/browser/event_router.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
11 #include "base/test/histogram_tester.h"
11 #include "base/macros.h" 12 #include "base/macros.h"
12 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
13 #include "base/values.h" 14 #include "base/values.h"
14 #include "content/public/browser/notification_service.h" 15 #include "content/public/browser/notification_service.h"
16 #include "content/public/test/test_browser_thread_bundle.h"
15 #include "extensions/browser/event_listener_map.h" 17 #include "extensions/browser/event_listener_map.h"
16 #include "extensions/browser/extensions_test.h" 18 #include "extensions/browser/extensions_test.h"
19 #include "extensions/common/extension_builder.h"
20 #include "extensions/common/test_util.h"
21 #include "extensions/common/value_builder.h"
17 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
18 23
19 namespace extensions { 24 namespace extensions {
20 25
21 namespace { 26 namespace {
22 27
23 // A simple mock to keep track of listener additions and removals. 28 // A simple mock to keep track of listener additions and removals.
24 class MockEventRouterObserver : public EventRouter::Observer { 29 class MockEventRouterObserver : public EventRouter::Observer {
25 public: 30 public:
26 MockEventRouterObserver() 31 MockEventRouterObserver()
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 79
75 scoped_ptr<EventListener> CreateEventListenerForURL( 80 scoped_ptr<EventListener> CreateEventListenerForURL(
76 const GURL& listener_url, 81 const GURL& listener_url,
77 const std::string& event_name, 82 const std::string& event_name,
78 content::RenderProcessHost* process, 83 content::RenderProcessHost* process,
79 base::DictionaryValue* filter) { 84 base::DictionaryValue* filter) {
80 return EventListener::ForURL( 85 return EventListener::ForURL(
81 event_name, listener_url, process, make_scoped_ptr(filter)); 86 event_name, listener_url, process, make_scoped_ptr(filter));
82 } 87 }
83 88
89 scoped_ptr<base::DictionaryValue> CreateBackgroundManifest(bool persistent) {
90 scoped_ptr<base::DictionaryValue> manifest =
91 make_scoped_ptr(new base::DictionaryValue());
92 manifest->SetString("background.page", "background.html");
93 manifest->SetBoolean("background.persistent", persistent);
94 return manifest;
imcheng 2016/01/20 18:28:21 It should compile if you changed this to: std::mo
mark a. foltz 2016/01/20 21:58:07 Thanks! That was the fix. It isn't clear to me y
95 }
96
84 } // namespace 97 } // namespace
85 98
86 class EventRouterTest : public ExtensionsTest { 99 class EventRouterTest : public ExtensionsTest {
87 public: 100 public:
88 EventRouterTest() 101 EventRouterTest()
89 : notification_service_(content::NotificationService::Create()) {} 102 : notification_service_(content::NotificationService::Create()) {}
90 103
91 protected: 104 protected:
92 // Tests adding and removing observers from EventRouter. 105 // Tests adding and removing observers from EventRouter.
93 void RunEventRouterObserverTest(const EventListenerConstructor& constructor); 106 void RunEventRouterObserverTest(const EventListenerConstructor& constructor);
94 107
108 // Tests that the correct counts are recorded for the Extensions.Events
109 // histograms.
110 void ExpectHistogramCounts(int dispatch_count, int component_count,
111 int persistent_count, int suspended_count,
112 int component_suspended_count, int running_count) {
113 if (dispatch_count) {
114 histogram_tester_.ExpectBucketCount("Extensions.Events.Dispatch",
115 events::HistogramValue::FOR_TEST,
116 dispatch_count);
117 }
118 if (component_count) {
119 histogram_tester_.ExpectBucketCount(
120 "Extensions.Events.DispatchToComponent",
121 events::HistogramValue::FOR_TEST,
122 component_count);
123 }
124 if (persistent_count) {
125 histogram_tester_.ExpectBucketCount(
126 "Extensions.Events.DispatchWithPersistentBackgroundPage",
127 events::HistogramValue::FOR_TEST,
128 persistent_count);
129 }
130 if (suspended_count) {
131 histogram_tester_.ExpectBucketCount(
132 "Extensions.Events.DispatchWithSuspendedEventPage",
133 events::HistogramValue::FOR_TEST,
134 suspended_count);
135 }
136 if (component_suspended_count) {
137 histogram_tester_.ExpectBucketCount(
138 "Extensions.Events.DispatchToComponentWithSuspendedEventPage",
139 events::HistogramValue::FOR_TEST,
140 component_suspended_count);
141 }
142 if (running_count) {
143 histogram_tester_.ExpectBucketCount(
144 "Extensions.Events.DispatchWithRunningEventPage",
145 events::HistogramValue::FOR_TEST,
146 running_count);
147 }
148 }
149
95 private: 150 private:
96 scoped_ptr<content::NotificationService> notification_service_; 151 scoped_ptr<content::NotificationService> notification_service_;
152 content::TestBrowserThreadBundle thread_bundle_;
153 base::HistogramTester histogram_tester_;
97 154
98 DISALLOW_COPY_AND_ASSIGN(EventRouterTest); 155 DISALLOW_COPY_AND_ASSIGN(EventRouterTest);
99 }; 156 };
100 157
101 TEST_F(EventRouterTest, GetBaseEventName) { 158 TEST_F(EventRouterTest, GetBaseEventName) {
102 // Normal event names are passed through unchanged. 159 // Normal event names are passed through unchanged.
103 EXPECT_EQ("foo.onBar", EventRouter::GetBaseEventName("foo.onBar")); 160 EXPECT_EQ("foo.onBar", EventRouter::GetBaseEventName("foo.onBar"));
104 161
105 // Sub-events are converted to the part before the slash. 162 // Sub-events are converted to the part before the slash.
106 EXPECT_EQ("foo.onBar", EventRouter::GetBaseEventName("foo.onBar/123")); 163 EXPECT_EQ("foo.onBar", EventRouter::GetBaseEventName("foo.onBar/123"));
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 TEST_F(EventRouterTest, EventRouterObserverForExtensions) { 221 TEST_F(EventRouterTest, EventRouterObserverForExtensions) {
165 RunEventRouterObserverTest( 222 RunEventRouterObserverTest(
166 base::Bind(&CreateEventListenerForExtension, "extension_id")); 223 base::Bind(&CreateEventListenerForExtension, "extension_id"));
167 } 224 }
168 225
169 TEST_F(EventRouterTest, EventRouterObserverForURLs) { 226 TEST_F(EventRouterTest, EventRouterObserverForURLs) {
170 RunEventRouterObserverTest( 227 RunEventRouterObserverTest(
171 base::Bind(&CreateEventListenerForURL, GURL("http://google.com/path"))); 228 base::Bind(&CreateEventListenerForURL, GURL("http://google.com/path")));
172 } 229 }
173 230
231 TEST_F(EventRouterTest, TestReportEvent) {
232 EventRouter router(browser_context(), NULL);
233 // TODO: Create component extensions w/ and w/out lazy background page
234 // Use ExtensionBuilder.
235 scoped_refptr<Extension> normal = test_util::CreateEmptyExtension("id1");
236 router.ReportEvent(events::HistogramValue::FOR_TEST,
237 normal.get(),
238 false /** did_enqueue */);
239 ExpectHistogramCounts(1 /** Dispatch */,
240 0 /** DispatchToComponent */,
241 0 /** DispatchWithPersistentBackgroundPage */,
242 0 /** DispatchWithSuspendedEventPage */,
243 0 /** DispatchToComponentWithSuspendedEventPage */,
244 0 /** DispatchWithRunningEventPage */);
245
246 ExtensionBuilder component_builder;
247 scoped_refptr<Extension> component = component_builder.
248 SetLocation(Manifest::Location::COMPONENT).Build();
249 router.ReportEvent(events::HistogramValue::FOR_TEST,
250 component.get(),
251 false /** did_enqueue */);
252 ExpectHistogramCounts(2, 1, 0, 0, 0, 0);
253
254 ExtensionBuilder persistent_builder;
255 scoped_ptr<base::DictionaryValue> persistent_manifest =
256 CreateBackgroundManifest(true);
257
258 scoped_refptr<Extension> persistent = persistent_builder.
259 SetManifest(persistent_manifest).Build();
260 router.ReportEvent(events::HistogramValue::FOR_TEST,
261 persistent.get(),
262 false /** did_enqueue */);
263 ExpectHistogramCounts(3, 1, 1, 0, 0, 0);
264
265 // ExtensionBuilder event_builder;
266 // scoped_refptr<Extension> event = event_builder.
267 // SetManifest(CreateBackgroundManifest(false)).Build();
268 // router.ReportEvent(events::HistogramValue::FOR_TEST,
269 // event.get(),
270 // false /** did_enqueue */);
271 // router.ReportEvent(events::HistogramValue::FOR_TEST,
272 // event.get(),
273 // true /** did_enqueue */);
274 // ExpectHistogramCounts(4, 1, 1, 1, 0, 1);
275
276 // ExtensionBuilder component_event_builder;
277 // scoped_refptr<Extension> component_event = component_event_builder.
278 // SetLocation(Manifest::Location::COMPONENT).
279 // SetManifest(CreateBackgroundManifest(false)).Build();
280 // router.ReportEvent(events::HistogramValue::FOR_TEST,
281 // component_event.get(),
282 // false /** did_enqueue */);
283 // router.ReportEvent(events::HistogramValue::FOR_TEST,
284 // component_event.get(),
285 // true /** did_enqueue */);
286 // ExpectHistogramCounts(5, 2, 1, 2, 1, 2);
287 }
288
174 } // namespace extensions 289 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/event_router.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698