1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Use of this source code is governed by a BSD-style license that can be
3dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// found in the LICENSE file.
4dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/extensions/extension_event_router_forwarder.h"
6dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
7dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "base/message_loop.h"
8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/profiles/profile_manager.h"
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/test/testing_browser_process_test.h"
10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/test/testing_profile.h"
11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/test/thread_test_helper.h"
12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h"
13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "googleurl/src/gurl.h"
14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "testing/gmock/include/gmock/gmock.h"
15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "testing/gtest/include/gtest/gtest.h"
16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "ui/base/system_monitor/system_monitor.h"
17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsennamespace {
19dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
20dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenconst char kEventName[] = "event_name";
21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenconst char kEventArgs[] = "event_args";
22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenconst char kExt[] = "extension";
23dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass MockExtensionEventRouterForwarder : public ExtensionEventRouterForwarder {
25dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public:
26dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual ~MockExtensionEventRouterForwarder() {}
27dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  MOCK_METHOD6(CallExtensionEventRouter,
29dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      void(Profile*, const std::string&, const std::string&, const std::string&,
30dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen           Profile*, const GURL&));
31dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen};
32dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
33dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}  // namespace
34dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass ExtensionEventRouterForwarderTest : public TestingBrowserProcessTest {
36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen protected:
37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  ExtensionEventRouterForwarderTest()
38dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      : ui_thread_(BrowserThread::UI, &message_loop_),
39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen        io_thread_(BrowserThread::IO) {
40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  }
41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  ~ExtensionEventRouterForwarderTest() {
43dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  }
44dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
45dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void SetUp() {
46dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    // Inject a BrowserProcess with a ProfileManager.
47dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    ASSERT_TRUE(io_thread_.Start());
48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    TestingBrowserProcess* browser_process = testing_browser_process_.get();
50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    browser_process->SetProfileManager(new ProfileManager);
51dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
52dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    profile1_ = new TestingProfile();
53dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    profile2_ = new TestingProfile();
54dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    browser_process->profile_manager()->RegisterProfile(profile1_, true);
56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    browser_process->profile_manager()->RegisterProfile(profile2_, true);
57dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  }
58dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
59dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  TestingProfile* CreateIncognitoProfile(TestingProfile* base) {
60dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    TestingProfile* incognito = new TestingProfile();
61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    incognito->set_incognito(true);
62dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    base->SetOffTheRecordProfile(incognito);
63dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    return incognito;
64dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  }
65dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
66dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  MessageLoopForUI message_loop_;
67dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  BrowserThread ui_thread_;
68dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  BrowserThread io_thread_;
69dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  ui::SystemMonitor dummy;
70dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Profiles are weak pointers, owned by ProfileManager in |browser_process_|.
71dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  TestingProfile* profile1_;
72dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  TestingProfile* profile2_;
73dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen};
74dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
75dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(ExtensionEventRouterForwarderTest, BroadcastRendererUI) {
76dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  scoped_refptr<MockExtensionEventRouterForwarder> event_router(
77dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      new MockExtensionEventRouterForwarder);
78dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  GURL url;
79dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
80dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(
81dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          profile1_, "", kEventName, kEventArgs, profile1_, url));
82dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
83dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(
84dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          profile2_, "", kEventName, kEventArgs, profile2_, url));
85dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  event_router->BroadcastEventToRenderers(kEventName, kEventArgs, url);
86dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
87dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
88dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(ExtensionEventRouterForwarderTest, BroadcastRendererUIIncognito) {
89dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  scoped_refptr<MockExtensionEventRouterForwarder> event_router(
90dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      new MockExtensionEventRouterForwarder);
91dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  using ::testing::_;
92dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  GURL url;
93dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  Profile* incognito = CreateIncognitoProfile(profile1_);
94dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
95dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(
96dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          profile1_, "", kEventName, kEventArgs, profile1_, url));
97dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
98dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(incognito, _, _, _, _, _)).Times(0);
99dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
100dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(
101dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          profile2_, "", kEventName, kEventArgs, profile2_, url));
102dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  event_router->BroadcastEventToRenderers(kEventName, kEventArgs, url);
103dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
104dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
105dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// This is the canonical test for passing control flow from the IO thread
106dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// to the UI thread. Repeating this for all public functions of
107dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// ExtensionEventRouterForwarder would not increase coverage.
108dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(ExtensionEventRouterForwarderTest, BroadcastRendererIO) {
109dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  scoped_refptr<MockExtensionEventRouterForwarder> event_router(
110dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      new MockExtensionEventRouterForwarder);
111dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  GURL url;
112dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
113dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(
114dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          profile1_, "", kEventName, kEventArgs, profile1_, url));
115dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
116dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(
117dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          profile2_, "", kEventName, kEventArgs, profile2_, url));
118dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
119dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      NewRunnableMethod(
120dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          event_router.get(),
121dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          &MockExtensionEventRouterForwarder::BroadcastEventToRenderers,
122dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          std::string(kEventName), std::string(kEventArgs), url));
123dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
124dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Wait for IO thread's message loop to be processed
125dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  scoped_refptr<ThreadTestHelper> helper(
126dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      new ThreadTestHelper(BrowserThread::IO));
127dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  ASSERT_TRUE(helper->Run());
128dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
129dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  MessageLoop::current()->RunAllPending();
130dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
131dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
132dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(ExtensionEventRouterForwarderTest, UnicastRendererUIRestricted) {
133dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  scoped_refptr<MockExtensionEventRouterForwarder> event_router(
134dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      new MockExtensionEventRouterForwarder);
135dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  using ::testing::_;
136dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  GURL url;
137dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
138dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(
139dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          profile1_, "", kEventName, kEventArgs, profile1_, url));
140dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
141dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(profile2_, _, _, _, _, _)).Times(0);
142dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  event_router->DispatchEventToRenderers(kEventName, kEventArgs,
143dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                         profile1_->GetRuntimeId(),
144dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                         true, url);
145dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
146dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
147dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(ExtensionEventRouterForwarderTest,
148dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen       UnicastRendererUIRestrictedIncognito1) {
149dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  scoped_refptr<MockExtensionEventRouterForwarder> event_router(
150dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      new MockExtensionEventRouterForwarder);
151dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  Profile* incognito = CreateIncognitoProfile(profile1_);
152dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  using ::testing::_;
153dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  GURL url;
154dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
155dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(
156dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          profile1_, "", kEventName, kEventArgs, profile1_, url));
157dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
158dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(incognito, _, _, _, _, _)).Times(0);
159dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
160dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(profile2_, _, _, _, _, _)).Times(0);
161dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  event_router->DispatchEventToRenderers(kEventName, kEventArgs,
162dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                         profile1_->GetRuntimeId(),
163dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                         true, url);
164dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
165dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
166dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(ExtensionEventRouterForwarderTest,
167dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen       UnicastRendererUIRestrictedIncognito2) {
168dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  scoped_refptr<MockExtensionEventRouterForwarder> event_router(
169dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      new MockExtensionEventRouterForwarder);
170dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  Profile* incognito = CreateIncognitoProfile(profile1_);
171dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  using ::testing::_;
172dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  GURL url;
173dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
174dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(profile1_, _, _, _, _, _)).Times(0);
175dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
176dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(
177dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          incognito, "", kEventName, kEventArgs, incognito, url));
178dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
179dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(profile2_, _, _, _, _, _)).Times(0);
180dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  event_router->DispatchEventToRenderers(kEventName, kEventArgs,
181dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                         incognito->GetRuntimeId(),
182dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                         true, url);
183dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
184dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
185dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(ExtensionEventRouterForwarderTest, UnicastRendererUIUnrestricted) {
186dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  scoped_refptr<MockExtensionEventRouterForwarder> event_router(
187dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      new MockExtensionEventRouterForwarder);
188dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  using ::testing::_;
189dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  GURL url;
190dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
191dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(
192dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          profile1_, "", kEventName, kEventArgs, NULL, url));
193dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
194dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(profile2_, _, _, _, _, _)).Times(0);
195dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  event_router->DispatchEventToRenderers(kEventName, kEventArgs,
196dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                         profile1_->GetRuntimeId(),
197dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                         false, url);
198dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
199dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
200dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(ExtensionEventRouterForwarderTest,
201dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen       UnicastRendererUIUnrestrictedIncognito) {
202dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  scoped_refptr<MockExtensionEventRouterForwarder> event_router(
203dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      new MockExtensionEventRouterForwarder);
204dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  Profile* incognito = CreateIncognitoProfile(profile1_);
205dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  using ::testing::_;
206dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  GURL url;
207dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
208dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(
209dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          profile1_, "", kEventName, kEventArgs, NULL, url));
210dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
211dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(incognito, _, _, _, _, _)).Times(0);
212dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
213dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(profile2_, _, _, _, _, _)).Times(0);
214dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  event_router->DispatchEventToRenderers(kEventName, kEventArgs,
215dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                         profile1_->GetRuntimeId(),
216dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                         false, url);
217dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
218dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
219dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(ExtensionEventRouterForwarderTest, BroadcastExtensionUI) {
220dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  scoped_refptr<MockExtensionEventRouterForwarder> event_router(
221dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      new MockExtensionEventRouterForwarder);
222dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  GURL url;
223dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
224dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(
225dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          profile1_, kExt, kEventName, kEventArgs, profile1_, url));
226dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
227dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(
228dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          profile2_, kExt, kEventName, kEventArgs, profile2_, url));
229dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  event_router->BroadcastEventToExtension(kExt, kEventName, kEventArgs, url);
230dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
231dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
232dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(ExtensionEventRouterForwarderTest, UnicastExtensionUIRestricted) {
233dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  scoped_refptr<MockExtensionEventRouterForwarder> event_router(
234dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      new MockExtensionEventRouterForwarder);
235dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  using ::testing::_;
236dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  GURL url;
237dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
238dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(
239dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          profile1_, kExt, kEventName, kEventArgs, profile1_, url));
240dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
241dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(profile2_, _, _, _, _, _)).Times(0);
242dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  event_router->DispatchEventToExtension(kExt, kEventName, kEventArgs,
243dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                         profile1_->GetRuntimeId(),
244dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                         true, url);
245dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
246dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
247dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(ExtensionEventRouterForwarderTest, UnicastExtensionUIUnrestricted) {
248dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  scoped_refptr<MockExtensionEventRouterForwarder> event_router(
249dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      new MockExtensionEventRouterForwarder);
250dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  using ::testing::_;
251dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  GURL url;
252dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
253dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(
254dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          profile1_, kExt, kEventName, kEventArgs, NULL, url));
255dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_CALL(*event_router,
256dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CallExtensionEventRouter(profile2_, _, _, _, _, _)).Times(0);
257dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  event_router->DispatchEventToExtension(kExt, kEventName, kEventArgs,
258dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                         profile1_->GetRuntimeId(),
259dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                         false, url);
260dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
261