OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <memory> | 5 #include <memory> |
6 #include <string> | 6 #include <string> |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/macros.h" |
| 11 #include "base/memory/ptr_util.h" |
10 #include "base/message_loop/message_loop.h" | 12 #include "base/message_loop/message_loop.h" |
11 #include "base/values.h" | 13 #include "base/values.h" |
12 #include "chrome/browser/chrome_notification_types.h" | 14 #include "chrome/browser/chrome_notification_types.h" |
13 #include "chrome/browser/extensions/active_tab_permission_granter.h" | 15 #include "chrome/browser/extensions/active_tab_permission_granter.h" |
14 #include "chrome/browser/extensions/tab_helper.h" | 16 #include "chrome/browser/extensions/tab_helper.h" |
15 #include "chrome/browser/profiles/profile.h" | 17 #include "chrome/browser/profiles/profile.h" |
16 #include "chrome/browser/sessions/session_tab_helper.h" | 18 #include "chrome/browser/sessions/session_tab_helper.h" |
17 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 19 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
18 #include "components/version_info/version_info.h" | 20 #include "components/version_info/version_info.h" |
19 #include "content/public/browser/browser_thread.h" | 21 #include "content/public/browser/browser_thread.h" |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 .Build(); | 62 .Build(); |
61 } | 63 } |
62 | 64 |
63 enum PermittedFeature { | 65 enum PermittedFeature { |
64 PERMITTED_NONE, | 66 PERMITTED_NONE, |
65 PERMITTED_SCRIPT_ONLY, | 67 PERMITTED_SCRIPT_ONLY, |
66 PERMITTED_CAPTURE_ONLY, | 68 PERMITTED_CAPTURE_ONLY, |
67 PERMITTED_BOTH | 69 PERMITTED_BOTH |
68 }; | 70 }; |
69 | 71 |
| 72 class ActiveTabPermissionGranterTestDelegate |
| 73 : public ActiveTabPermissionGranter::Delegate { |
| 74 public: |
| 75 ActiveTabPermissionGranterTestDelegate() {} |
| 76 ~ActiveTabPermissionGranterTestDelegate() override {} |
| 77 |
| 78 // ActiveTabPermissionGranterTestDelegate::Delegate |
| 79 bool ShouldGrantActiveTab(const Extension* extension, |
| 80 content::WebContents* contents) override { |
| 81 return should_grant_; |
| 82 } |
| 83 |
| 84 void SetShouldGrant(bool should_grant) { |
| 85 should_grant_ = should_grant; |
| 86 } |
| 87 |
| 88 private: |
| 89 bool should_grant_ = false; |
| 90 |
| 91 DISALLOW_COPY_AND_ASSIGN(ActiveTabPermissionGranterTestDelegate); |
| 92 }; |
| 93 |
70 class ActiveTabTest : public ChromeRenderViewHostTestHarness { | 94 class ActiveTabTest : public ChromeRenderViewHostTestHarness { |
71 protected: | 95 protected: |
72 ActiveTabTest() | 96 ActiveTabTest() |
73 : current_channel(version_info::Channel::DEV), | 97 : current_channel(version_info::Channel::DEV), |
74 extension(CreateTestExtension("deadbeef", true, false)), | 98 extension(CreateTestExtension("deadbeef", true, false)), |
75 another_extension(CreateTestExtension("feedbeef", true, false)), | 99 another_extension(CreateTestExtension("feedbeef", true, false)), |
76 extension_without_active_tab(CreateTestExtension("badbeef", | 100 extension_without_active_tab(CreateTestExtension("badbeef", |
77 false, | 101 false, |
78 false)), | 102 false)), |
79 extension_with_tab_capture(CreateTestExtension("cafebeef", | 103 extension_with_tab_capture(CreateTestExtension("cafebeef", |
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 const PermissionsData* permissions_data = | 397 const PermissionsData* permissions_data = |
374 extension_with_tab_capture->permissions_data(); | 398 extension_with_tab_capture->permissions_data(); |
375 EXPECT_TRUE(permissions_data->HasAPIPermissionForTab( | 399 EXPECT_TRUE(permissions_data->HasAPIPermissionForTab( |
376 tab_id(), APIPermission::kTabCaptureForTab)); | 400 tab_id(), APIPermission::kTabCaptureForTab)); |
377 | 401 |
378 EXPECT_TRUE(IsBlocked(extension_with_tab_capture, internal, tab_id() + 1)); | 402 EXPECT_TRUE(IsBlocked(extension_with_tab_capture, internal, tab_id() + 1)); |
379 EXPECT_FALSE(permissions_data->HasAPIPermissionForTab( | 403 EXPECT_FALSE(permissions_data->HasAPIPermissionForTab( |
380 tab_id() + 1, APIPermission::kTabCaptureForTab)); | 404 tab_id() + 1, APIPermission::kTabCaptureForTab)); |
381 } | 405 } |
382 | 406 |
| 407 // Test that the custom platform delegate works as expected. |
| 408 TEST_F(ActiveTabTest, Delegate) { |
| 409 auto test_delegate = |
| 410 base::MakeUnique<ActiveTabPermissionGranterTestDelegate>(); |
| 411 ActiveTabPermissionGranter::SetPlatformDelegate(test_delegate.get()); |
| 412 |
| 413 GURL google("http://www.google.com"); |
| 414 NavigateAndCommit(google); |
| 415 |
| 416 // Not granted because the delegate denies grant. |
| 417 active_tab_permission_granter()->GrantIfRequested(extension.get()); |
| 418 EXPECT_TRUE(IsBlocked(extension, google)); |
| 419 |
| 420 // This time it's granted because the delegate allows it. |
| 421 test_delegate->SetShouldGrant(true); |
| 422 active_tab_permission_granter()->GrantIfRequested(extension.get()); |
| 423 EXPECT_TRUE(IsAllowed(extension, google)); |
| 424 |
| 425 // Cleanup :). |
| 426 ActiveTabPermissionGranter::SetPlatformDelegate(nullptr); |
| 427 } |
| 428 |
383 } // namespace | 429 } // namespace |
384 } // namespace extensions | 430 } // namespace extensions |
OLD | NEW |