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

Side by Side Diff: chrome/browser/extensions/events_apitest.cc

Issue 2893693002: Remove NOTIFICATION_EXTENSION_ENABLED. (Closed)
Patch Set: connect devtools Created 3 years, 7 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
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "base/files/file_path.h" 5 #include "base/files/file_path.h"
6 #include "base/files/file_util.h" 6 #include "base/files/file_util.h"
7 #include "chrome/browser/extensions/extension_apitest.h" 7 #include "chrome/browser/extensions/extension_apitest.h"
8 #include "chrome/browser/extensions/extension_service.h"
9 #include "chrome/test/base/ui_test_utils.h"
8 #include "extensions/browser/event_router.h" 10 #include "extensions/browser/event_router.h"
9 #include "extensions/browser/extension_registry.h" 11 #include "extensions/browser/extension_registry.h"
12 #include "extensions/browser/scoped_ignore_content_verifier_for_test.h"
13 #include "extensions/test/result_catcher.h"
10 14
11 namespace extensions { 15 namespace extensions {
12 16
13 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, Events) { 17 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, Events) {
14 ASSERT_TRUE(RunExtensionTest("events")) << message_; 18 ASSERT_TRUE(RunExtensionTest("events")) << message_;
15 } 19 }
16 20
17 // Tests that events are unregistered when an extension page shuts down. 21 // Tests that events are unregistered when an extension page shuts down.
18 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, EventsAreUnregistered) { 22 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, EventsAreUnregistered) {
19 // In this test, page1.html registers for a number of events, then navigates 23 // In this test, page1.html registers for a number of events, then navigates
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 EXPECT_FALSE(event_router->ExtensionHasEventListener( 62 EXPECT_FALSE(event_router->ExtensionHasEventListener(
59 id, "webNavigation.onBeforeNavigate")); 63 id, "webNavigation.onBeforeNavigate"));
60 EXPECT_FALSE( 64 EXPECT_FALSE(
61 event_router->ExtensionHasEventListener(id, "webNavigation.onCommitted")); 65 event_router->ExtensionHasEventListener(id, "webNavigation.onCommitted"));
62 EXPECT_FALSE(event_router->ExtensionHasEventListener( 66 EXPECT_FALSE(event_router->ExtensionHasEventListener(
63 id, "webNavigation.onDOMContentLoaded")); 67 id, "webNavigation.onDOMContentLoaded"));
64 EXPECT_FALSE( 68 EXPECT_FALSE(
65 event_router->ExtensionHasEventListener(id, "webNavigation.onCompleted")); 69 event_router->ExtensionHasEventListener(id, "webNavigation.onCompleted"));
66 } 70 }
67 71
72 class EventsApiTest : public ExtensionApiTest {
73 public:
74 EventsApiTest() {}
75
76 protected:
77 void SetUpOnMainThread() override {
78 ExtensionApiTest::SetUpOnMainThread();
79 EXPECT_TRUE(scoped_temp_dir_.CreateUniqueTempDir());
80 }
81
82 struct ExtensionCRXData {
83 std::string unpacked_relative_path;
84 base::FilePath crx_path;
85 explicit ExtensionCRXData(const std::string& unpacked_relative_path)
86 : unpacked_relative_path(unpacked_relative_path) {}
87 };
88
89 void SetUpCRX(const std::string& root_dir,
90 const std::string& pem_filename,
91 std::vector<ExtensionCRXData>* crx_data_list) {
92 const base::FilePath test_dir = test_data_dir_.AppendASCII(root_dir);
93 const base::FilePath pem_path = test_dir.AppendASCII(pem_filename);
94 for (ExtensionCRXData& crx_data : *crx_data_list) {
95 crx_data.crx_path = PackExtensionWithOptions(
96 test_dir.AppendASCII(crx_data.unpacked_relative_path),
97 scoped_temp_dir_.GetPath().AppendASCII(
98 crx_data.unpacked_relative_path.append(".crx")),
99 pem_path, base::FilePath());
100 }
101 }
102
103 ExtensionService* service() {
Devlin 2017/05/23 21:30:36 There's already an extension_service() accessor on
lazyboy 2017/05/23 23:19:08 Removed.
104 if (!service_)
105 service_ =
106 extensions::ExtensionSystem::Get(profile())->extension_service();
107 return service_;
108 }
109
110 private:
111 ExtensionService* service_ = nullptr;
112 base::ScopedTempDir scoped_temp_dir_;
113 ScopedIgnoreContentVerifierForTest ignore_content_verification_;
114
115 DISALLOW_COPY_AND_ASSIGN(EventsApiTest);
116 };
117
118 // Tests that updating an extension sends runtime.onInstalled event to the
119 // updated extension.
120 IN_PROC_BROWSER_TEST_F(EventsApiTest, ExtensionUpdateSendsOnInstalledEvent) {
121 std::vector<ExtensionCRXData> data;
122 data.emplace_back("v1");
123 data.emplace_back("v2");
124 SetUpCRX("lazy_events/on_installed", "pem.pem", &data);
125
126 ExtensionId extension_id;
127 {
128 // Install version 1 of the extension and expect runtime.onInstalled.
129 ResultCatcher catcher;
130 const int expected_change = 1;
131 const Extension* extension_v1 =
132 InstallExtension(data[0].crx_path, expected_change);
133 extension_id = extension_v1->id();
134 ASSERT_TRUE(extension_v1);
135 EXPECT_TRUE(catcher.GetNextResult());
136 }
137 {
138 // Update to version 2, also expect runtime.onInstalled.
139 ResultCatcher catcher;
140 const int expected_change = 0;
141 const Extension* extension_v2 =
142 UpdateExtension(extension_id, data[1].crx_path, expected_change);
143 ASSERT_TRUE(extension_v2);
144 EXPECT_TRUE(catcher.GetNextResult());
145 }
146 }
147
148 // Tests that if updating an extension makes the extension disabled (due to
149 // permissions increase), then enabling the extension fires runtime.onInstalled
150 // correctly to the updated extension.
151 IN_PROC_BROWSER_TEST_F(EventsApiTest,
152 UpdateDispatchesOnInstalledAfterEnablement) {
153 std::vector<ExtensionCRXData> data;
154 data.emplace_back("v1");
155 data.emplace_back("v2");
156 SetUpCRX("lazy_events/on_installed_permissions_increase", "pem.pem", &data);
157
158 ExtensionRegistry* registry = ExtensionRegistry::Get(profile());
159 ExtensionId extension_id;
160 {
161 // Install version 1 of the extension and expect runtime.onInstalled.
162 ResultCatcher catcher;
163 const int expected_change = 1;
164 const Extension* extension_v1 =
165 InstallExtension(data[0].crx_path, expected_change);
166 extension_id = extension_v1->id();
167 ASSERT_TRUE(extension_v1);
168 EXPECT_TRUE(catcher.GetNextResult());
169 }
170 {
171 // Update to version 2, which will be disabled due to permissions increase.
172 ResultCatcher catcher;
173 const int expected_change = -1; // Expect extension to be disabled.
174 ASSERT_FALSE(
175 UpdateExtension(extension_id, data[1].crx_path, expected_change));
176
177 const Extension* extension_v2 =
178 registry->disabled_extensions().GetByID(extension_id);
179 ASSERT_TRUE(extension_v2);
180 // Enable the extension.
181 service()->GrantPermissionsAndEnableExtension(extension_v2);
182 EXPECT_TRUE(catcher.GetNextResult());
183 }
184 }
185
186 // Tests that if an extension's updated version has a new lazy listener, it
187 // fires properly after the update.
188 IN_PROC_BROWSER_TEST_F(EventsApiTest, NewlyIntroducedListener) {
Devlin 2017/05/23 21:30:36 I think this test would be a bit more interesting
lazyboy 2017/05/23 23:19:08 SG, done.
189 std::vector<ExtensionCRXData> data;
190 data.emplace_back("v1");
191 data.emplace_back("v2");
192 SetUpCRX("lazy_events/new_event_in_new_version", "pem.pem", &data);
193
194 ExtensionRegistry* registry = ExtensionRegistry::Get(profile());
195 ExtensionId extension_id;
196 {
197 // Install version 1 of the extension and expect runtime.onInstalled.
198 ResultCatcher catcher;
199 const int expected_change = 0;
200 const Extension* extension =
201 InstallExtension(data[0].crx_path, expected_change);
Devlin 2017/05/23 21:30:36 Maybe do InstallExtensionWithPermissionsGranted()?
lazyboy 2017/05/23 23:19:08 Unnecessary due to other comment.
202 EXPECT_FALSE(extension);
203 ExtensionIdSet disabled_ids = registry->disabled_extensions().GetIDs();
204 ASSERT_EQ(1u, disabled_ids.size());
205 ExtensionId disabled_id = *disabled_ids.begin();
206 const Extension* extension_v1 =
207 registry->disabled_extensions().GetByID(disabled_id);
208
209 // The extension requires "tabs" permission, so grant it.
210 service()->GrantPermissionsAndEnableExtension(extension_v1);
211 extension_id = extension_v1->id();
212 ASSERT_TRUE(extension_v1);
213 EXPECT_TRUE(catcher.GetNextResult());
214 }
215 {
216 // Update to version 2, that has tabs.onCreated event listener.
217 ResultCatcher catcher;
218 const int expected_change = 0;
219 const Extension* extension_v2 =
220 UpdateExtension(extension_id, data[1].crx_path, expected_change);
221 ASSERT_TRUE(extension_v2);
222 ui_test_utils::NavigateToURLWithDisposition(
223 browser(), GURL(url::kAboutBlankURL),
224 WindowOpenDisposition::NEW_BACKGROUND_TAB,
225 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
226 // Expect tabs.onCreated to fire.
227 EXPECT_TRUE(catcher.GetNextResult());
228 }
229 }
230
68 } // namespace extensions 231 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698