| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <stddef.h> | 5 #include <stddef.h> |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/values.h" | 10 #include "base/values.h" |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 TEST_F(ExtensionActionRunnerUnitTest, RequestPermissionAndExecute) { | 192 TEST_F(ExtensionActionRunnerUnitTest, RequestPermissionAndExecute) { |
| 193 const Extension* extension = AddExtension(); | 193 const Extension* extension = AddExtension(); |
| 194 ASSERT_TRUE(extension); | 194 ASSERT_TRUE(extension); |
| 195 | 195 |
| 196 NavigateAndCommit(GURL("https://www.google.com")); | 196 NavigateAndCommit(GURL("https://www.google.com")); |
| 197 | 197 |
| 198 // Ensure that there aren't any executions pending. | 198 // Ensure that there aren't any executions pending. |
| 199 ASSERT_EQ(0u, GetExecutionCountForExtension(extension->id())); | 199 ASSERT_EQ(0u, GetExecutionCountForExtension(extension->id())); |
| 200 ASSERT_FALSE(runner()->WantsToRun(extension)); | 200 ASSERT_FALSE(runner()->WantsToRun(extension)); |
| 201 | 201 |
| 202 ExtensionActionAPI* extension_action_api = ExtensionActionAPI::Get(profile()); | |
| 203 ASSERT_FALSE(extension_action_api->HasBeenBlocked(extension, web_contents())); | |
| 204 | |
| 205 // Since the extension requests all_hosts, we should require user consent. | 202 // Since the extension requests all_hosts, we should require user consent. |
| 206 EXPECT_TRUE(RequiresUserConsent(extension)); | 203 EXPECT_TRUE(RequiresUserConsent(extension)); |
| 207 | 204 |
| 208 // Request an injection. The extension should want to run, but should not have | 205 // Request an injection. The extension should want to run, but should not have |
| 209 // executed. | 206 // executed. |
| 210 RequestInjection(extension); | 207 RequestInjection(extension); |
| 211 EXPECT_TRUE(runner()->WantsToRun(extension)); | 208 EXPECT_TRUE(runner()->WantsToRun(extension)); |
| 212 EXPECT_TRUE(extension_action_api->HasBeenBlocked(extension, web_contents())); | |
| 213 EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id())); | 209 EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id())); |
| 214 | 210 |
| 215 // Click to accept the extension executing. | 211 // Click to accept the extension executing. |
| 216 runner()->OnClicked(extension); | 212 runner()->RunAction(extension, true); |
| 217 | 213 |
| 218 // The extension should execute, and the extension shouldn't want to run. | 214 // The extension should execute, and the extension shouldn't want to run. |
| 219 EXPECT_EQ(1u, GetExecutionCountForExtension(extension->id())); | 215 EXPECT_EQ(1u, GetExecutionCountForExtension(extension->id())); |
| 220 EXPECT_FALSE(runner()->WantsToRun(extension)); | 216 EXPECT_FALSE(runner()->WantsToRun(extension)); |
| 221 EXPECT_FALSE(extension_action_api->HasBeenBlocked(extension, web_contents())); | |
| 222 | 217 |
| 223 // Since we already executed on the given page, we shouldn't need permission | 218 // Since we already executed on the given page, we shouldn't need permission |
| 224 // for a second time. | 219 // for a second time. |
| 225 EXPECT_FALSE(RequiresUserConsent(extension)); | 220 EXPECT_FALSE(RequiresUserConsent(extension)); |
| 226 | 221 |
| 227 // Reloading and same-origin navigations shouldn't clear those permissions, | 222 // Reloading and same-origin navigations shouldn't clear those permissions, |
| 228 // and we shouldn't require user constent again. | 223 // and we shouldn't require user constent again. |
| 229 Reload(); | 224 Reload(); |
| 230 EXPECT_FALSE(RequiresUserConsent(extension)); | 225 EXPECT_FALSE(RequiresUserConsent(extension)); |
| 231 NavigateAndCommit(GURL("https://www.google.com/foo")); | 226 NavigateAndCommit(GURL("https://www.google.com/foo")); |
| 232 EXPECT_FALSE(RequiresUserConsent(extension)); | 227 EXPECT_FALSE(RequiresUserConsent(extension)); |
| 233 NavigateAndCommit(GURL("https://www.google.com/bar")); | 228 NavigateAndCommit(GURL("https://www.google.com/bar")); |
| 234 EXPECT_FALSE(RequiresUserConsent(extension)); | 229 EXPECT_FALSE(RequiresUserConsent(extension)); |
| 235 | 230 |
| 236 // Cross-origin navigations should clear permissions. | 231 // Cross-origin navigations should clear permissions. |
| 237 NavigateAndCommit(GURL("https://otherdomain.google.com")); | 232 NavigateAndCommit(GURL("https://otherdomain.google.com")); |
| 238 EXPECT_TRUE(RequiresUserConsent(extension)); | 233 EXPECT_TRUE(RequiresUserConsent(extension)); |
| 239 | 234 |
| 240 // Grant access. | 235 // Grant access. |
| 241 RequestInjection(extension); | 236 RequestInjection(extension); |
| 242 runner()->OnClicked(extension); | 237 runner()->RunAction(extension, true); |
| 243 EXPECT_EQ(2u, GetExecutionCountForExtension(extension->id())); | 238 EXPECT_EQ(2u, GetExecutionCountForExtension(extension->id())); |
| 244 EXPECT_FALSE(runner()->WantsToRun(extension)); | 239 EXPECT_FALSE(runner()->WantsToRun(extension)); |
| 245 | 240 |
| 246 // Navigating to another site should also clear the permissions. | 241 // Navigating to another site should also clear the permissions. |
| 247 NavigateAndCommit(GURL("https://www.foo.com")); | 242 NavigateAndCommit(GURL("https://www.foo.com")); |
| 248 EXPECT_TRUE(RequiresUserConsent(extension)); | 243 EXPECT_TRUE(RequiresUserConsent(extension)); |
| 249 } | 244 } |
| 250 | 245 |
| 251 // Test that injections that are not executed by the time the user navigates are | 246 // Test that injections that are not executed by the time the user navigates are |
| 252 // ignored and never execute. | 247 // ignored and never execute. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 264 EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id())); | 259 EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id())); |
| 265 | 260 |
| 266 // Reload. This should remove the pending injection, and we should not | 261 // Reload. This should remove the pending injection, and we should not |
| 267 // execute anything. | 262 // execute anything. |
| 268 Reload(); | 263 Reload(); |
| 269 EXPECT_FALSE(runner()->WantsToRun(extension)); | 264 EXPECT_FALSE(runner()->WantsToRun(extension)); |
| 270 EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id())); | 265 EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id())); |
| 271 | 266 |
| 272 // Request and accept a new injection. | 267 // Request and accept a new injection. |
| 273 RequestInjection(extension); | 268 RequestInjection(extension); |
| 274 runner()->OnClicked(extension); | 269 runner()->RunAction(extension, true); |
| 275 | 270 |
| 276 // The extension should only have executed once, even though a grand total | 271 // The extension should only have executed once, even though a grand total |
| 277 // of two executions were requested. | 272 // of two executions were requested. |
| 278 EXPECT_EQ(1u, GetExecutionCountForExtension(extension->id())); | 273 EXPECT_EQ(1u, GetExecutionCountForExtension(extension->id())); |
| 279 EXPECT_FALSE(runner()->WantsToRun(extension)); | 274 EXPECT_FALSE(runner()->WantsToRun(extension)); |
| 280 } | 275 } |
| 281 | 276 |
| 282 // Test that queueing multiple pending injections, and then accepting, triggers | 277 // Test that queueing multiple pending injections, and then accepting, triggers |
| 283 // them all. | 278 // them all. |
| 284 TEST_F(ExtensionActionRunnerUnitTest, MultiplePendingInjection) { | 279 TEST_F(ExtensionActionRunnerUnitTest, MultiplePendingInjection) { |
| 285 const Extension* extension = AddExtension(); | 280 const Extension* extension = AddExtension(); |
| 286 ASSERT_TRUE(extension); | 281 ASSERT_TRUE(extension); |
| 287 NavigateAndCommit(GURL("https://www.google.com")); | 282 NavigateAndCommit(GURL("https://www.google.com")); |
| 288 | 283 |
| 289 ASSERT_EQ(0u, GetExecutionCountForExtension(extension->id())); | 284 ASSERT_EQ(0u, GetExecutionCountForExtension(extension->id())); |
| 290 | 285 |
| 291 const size_t kNumInjections = 3u; | 286 const size_t kNumInjections = 3u; |
| 292 // Queue multiple pending injections. | 287 // Queue multiple pending injections. |
| 293 for (size_t i = 0u; i < kNumInjections; ++i) | 288 for (size_t i = 0u; i < kNumInjections; ++i) |
| 294 RequestInjection(extension); | 289 RequestInjection(extension); |
| 295 | 290 |
| 296 EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id())); | 291 EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id())); |
| 297 | 292 |
| 298 runner()->OnClicked(extension); | 293 runner()->RunAction(extension, true); |
| 299 | 294 |
| 300 // All pending injections should have executed. | 295 // All pending injections should have executed. |
| 301 EXPECT_EQ(kNumInjections, GetExecutionCountForExtension(extension->id())); | 296 EXPECT_EQ(kNumInjections, GetExecutionCountForExtension(extension->id())); |
| 302 EXPECT_FALSE(runner()->WantsToRun(extension)); | 297 EXPECT_FALSE(runner()->WantsToRun(extension)); |
| 303 } | 298 } |
| 304 | 299 |
| 305 TEST_F(ExtensionActionRunnerUnitTest, ActiveScriptsUseActiveTabPermissions) { | 300 TEST_F(ExtensionActionRunnerUnitTest, ActiveScriptsUseActiveTabPermissions) { |
| 306 const Extension* extension = AddExtension(); | 301 const Extension* extension = AddExtension(); |
| 307 NavigateAndCommit(GURL("https://www.google.com")); | 302 NavigateAndCommit(GURL("https://www.google.com")); |
| 308 | 303 |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 386 EXPECT_TRUE(RequiresUserConsent(extension)); | 381 EXPECT_TRUE(RequiresUserConsent(extension)); |
| 387 | 382 |
| 388 // Request an injection. The extension should want to run, but not execute. | 383 // Request an injection. The extension should want to run, but not execute. |
| 389 RequestInjection(extension); | 384 RequestInjection(extension); |
| 390 EXPECT_TRUE(runner()->WantsToRun(extension)); | 385 EXPECT_TRUE(runner()->WantsToRun(extension)); |
| 391 EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id())); | 386 EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id())); |
| 392 | 387 |
| 393 // Allow the extension to always run on this origin. | 388 // Allow the extension to always run on this origin. |
| 394 ScriptingPermissionsModifier modifier(profile(), extension); | 389 ScriptingPermissionsModifier modifier(profile(), extension); |
| 395 modifier.GrantHostPermission(web_contents()->GetLastCommittedURL()); | 390 modifier.GrantHostPermission(web_contents()->GetLastCommittedURL()); |
| 396 runner()->OnClicked(extension); | 391 runner()->RunAction(extension, true); |
| 397 | 392 |
| 398 // The extension should execute, and the extension shouldn't want to run. | 393 // The extension should execute, and the extension shouldn't want to run. |
| 399 EXPECT_EQ(1u, GetExecutionCountForExtension(extension->id())); | 394 EXPECT_EQ(1u, GetExecutionCountForExtension(extension->id())); |
| 400 EXPECT_FALSE(runner()->WantsToRun(extension)); | 395 EXPECT_FALSE(runner()->WantsToRun(extension)); |
| 401 | 396 |
| 402 // Since we already executed on the given page, we shouldn't need permission | 397 // Since we already executed on the given page, we shouldn't need permission |
| 403 // for a second time. | 398 // for a second time. |
| 404 EXPECT_FALSE(RequiresUserConsent(extension)); | 399 EXPECT_FALSE(RequiresUserConsent(extension)); |
| 405 | 400 |
| 406 // Navigating to another site that hasn't been granted a persisted permission | 401 // Navigating to another site that hasn't been granted a persisted permission |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 442 RequestInjection(extension, UserScript::DOCUMENT_END); | 437 RequestInjection(extension, UserScript::DOCUMENT_END); |
| 443 EXPECT_EQ(BLOCKED_ACTION_SCRIPT_OTHER, | 438 EXPECT_EQ(BLOCKED_ACTION_SCRIPT_OTHER, |
| 444 runner()->GetBlockedActions(extension)); | 439 runner()->GetBlockedActions(extension)); |
| 445 RequestInjection(extension, UserScript::DOCUMENT_IDLE); | 440 RequestInjection(extension, UserScript::DOCUMENT_IDLE); |
| 446 EXPECT_EQ(BLOCKED_ACTION_SCRIPT_OTHER, | 441 EXPECT_EQ(BLOCKED_ACTION_SCRIPT_OTHER, |
| 447 runner()->GetBlockedActions(extension)); | 442 runner()->GetBlockedActions(extension)); |
| 448 RequestInjection(extension, UserScript::DOCUMENT_START); | 443 RequestInjection(extension, UserScript::DOCUMENT_START); |
| 449 EXPECT_EQ(BLOCKED_ACTION_SCRIPT_AT_START | BLOCKED_ACTION_SCRIPT_OTHER, | 444 EXPECT_EQ(BLOCKED_ACTION_SCRIPT_AT_START | BLOCKED_ACTION_SCRIPT_OTHER, |
| 450 runner()->GetBlockedActions(extension)); | 445 runner()->GetBlockedActions(extension)); |
| 451 | 446 |
| 452 runner()->OnClicked(extension); | 447 runner()->RunAction(extension, true); |
| 453 EXPECT_EQ(BLOCKED_ACTION_NONE, runner()->GetBlockedActions(extension)); | 448 EXPECT_EQ(BLOCKED_ACTION_NONE, runner()->GetBlockedActions(extension)); |
| 454 } | 449 } |
| 455 | 450 |
| 456 TEST_F(ExtensionActionRunnerUnitTest, TestWebRequestBlocked) { | 451 TEST_F(ExtensionActionRunnerUnitTest, TestWebRequestBlocked) { |
| 457 const Extension* extension = AddExtension(); | 452 const Extension* extension = AddExtension(); |
| 458 ASSERT_TRUE(extension); | 453 ASSERT_TRUE(extension); |
| 459 | 454 |
| 460 NavigateAndCommit(GURL("https://www.foo.com")); | 455 NavigateAndCommit(GURL("https://www.foo.com")); |
| 461 | 456 |
| 462 EXPECT_EQ(BLOCKED_ACTION_NONE, runner()->GetBlockedActions(extension)); | 457 EXPECT_EQ(BLOCKED_ACTION_NONE, runner()->GetBlockedActions(extension)); |
| 463 EXPECT_FALSE(runner()->WantsToRun(extension)); | 458 EXPECT_FALSE(runner()->WantsToRun(extension)); |
| 464 | 459 |
| 465 runner()->OnWebRequestBlocked(extension); | 460 runner()->OnWebRequestBlocked(extension); |
| 466 EXPECT_EQ(BLOCKED_ACTION_WEB_REQUEST, runner()->GetBlockedActions(extension)); | 461 EXPECT_EQ(BLOCKED_ACTION_WEB_REQUEST, runner()->GetBlockedActions(extension)); |
| 467 EXPECT_TRUE(runner()->WantsToRun(extension)); | 462 EXPECT_TRUE(runner()->WantsToRun(extension)); |
| 468 | 463 |
| 469 RequestInjection(extension); | 464 RequestInjection(extension); |
| 470 EXPECT_EQ(BLOCKED_ACTION_WEB_REQUEST | BLOCKED_ACTION_SCRIPT_OTHER, | 465 EXPECT_EQ(BLOCKED_ACTION_WEB_REQUEST | BLOCKED_ACTION_SCRIPT_OTHER, |
| 471 runner()->GetBlockedActions(extension)); | 466 runner()->GetBlockedActions(extension)); |
| 472 EXPECT_TRUE(runner()->WantsToRun(extension)); | 467 EXPECT_TRUE(runner()->WantsToRun(extension)); |
| 473 | 468 |
| 474 NavigateAndCommit(GURL("https://www.bar.com")); | 469 NavigateAndCommit(GURL("https://www.bar.com")); |
| 475 EXPECT_EQ(BLOCKED_ACTION_NONE, runner()->GetBlockedActions(extension)); | 470 EXPECT_EQ(BLOCKED_ACTION_NONE, runner()->GetBlockedActions(extension)); |
| 476 EXPECT_FALSE(runner()->WantsToRun(extension)); | 471 EXPECT_FALSE(runner()->WantsToRun(extension)); |
| 477 } | 472 } |
| 478 | 473 |
| 479 } // namespace extensions | 474 } // namespace extensions |
| OLD | NEW |