| 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 "chrome/browser/content_settings/permission_context_base.h" | 5 #include "chrome/browser/content_settings/permission_context_base.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "chrome/browser/content_settings/permission_queue_controller.h" | 9 #include "chrome/browser/content_settings/permission_queue_controller.h" |
| 10 #include "chrome/browser/infobars/infobar_service.h" | 10 #include "chrome/browser/infobars/infobar_service.h" |
| 11 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h" | 11 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h" |
| 12 #include "chrome/common/chrome_switches.h" | 12 #include "chrome/common/chrome_switches.h" |
| 13 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 13 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| 14 #include "chrome/test/base/testing_profile.h" | 14 #include "chrome/test/base/testing_profile.h" |
| 15 #include "components/content_settings/core/browser/host_content_settings_map.h" | 15 #include "components/content_settings/core/browser/host_content_settings_map.h" |
| 16 #include "components/content_settings/core/common/content_settings.h" | 16 #include "components/content_settings/core/common/content_settings.h" |
| 17 #include "components/content_settings/core/common/content_settings_types.h" | 17 #include "components/content_settings/core/common/content_settings_types.h" |
| 18 #include "components/content_settings/core/common/permission_request_id.h" | 18 #include "components/content_settings/core/common/permission_request_id.h" |
| 19 #include "content/public/browser/render_frame_host.h" |
| 19 #include "content/public/browser/web_contents.h" | 20 #include "content/public/browser/web_contents.h" |
| 20 #include "content/public/test/mock_render_process_host.h" | 21 #include "content/public/test/mock_render_process_host.h" |
| 21 #include "content/public/test/web_contents_tester.h" | 22 #include "content/public/test/web_contents_tester.h" |
| 22 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
| 23 | 24 |
| 24 class TestPermissionContext : public PermissionContextBase { | 25 class TestPermissionContext : public PermissionContextBase { |
| 25 public: | 26 public: |
| 26 TestPermissionContext(Profile* profile, | 27 TestPermissionContext(Profile* profile, |
| 27 const ContentSettingsType permission_type) | 28 const ContentSettingsType permission_type) |
| 28 : PermissionContextBase(profile, permission_type), | 29 : PermissionContextBase(profile, permission_type), |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 } | 102 } |
| 102 | 103 |
| 103 void TestAskAndGrant_TestContent() { | 104 void TestAskAndGrant_TestContent() { |
| 104 TestPermissionContext permission_context( | 105 TestPermissionContext permission_context( |
| 105 profile(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS); | 106 profile(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS); |
| 106 GURL url("http://www.google.com"); | 107 GURL url("http://www.google.com"); |
| 107 content::WebContentsTester::For(web_contents())->NavigateAndCommit(url); | 108 content::WebContentsTester::For(web_contents())->NavigateAndCommit(url); |
| 108 | 109 |
| 109 const PermissionRequestID id( | 110 const PermissionRequestID id( |
| 110 web_contents()->GetRenderProcessHost()->GetID(), | 111 web_contents()->GetRenderProcessHost()->GetID(), |
| 111 web_contents()->GetRenderViewHost()->GetRoutingID(), | 112 web_contents()->GetMainFrame()->GetRoutingID(), |
| 112 -1, GURL()); | 113 -1, GURL()); |
| 113 permission_context.RequestPermission( | 114 permission_context.RequestPermission( |
| 114 web_contents(), | 115 web_contents(), |
| 115 id, url, true, | 116 id, url, true, |
| 116 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 117 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 117 base::Unretained(&permission_context))); | 118 base::Unretained(&permission_context))); |
| 118 | 119 |
| 119 RespondToPermission(&permission_context, id, url, true); | 120 RespondToPermission(&permission_context, id, url, true); |
| 120 EXPECT_TRUE(permission_context.permission_set()); | 121 EXPECT_TRUE(permission_context.permission_set()); |
| 121 EXPECT_TRUE(permission_context.permission_granted()); | 122 EXPECT_TRUE(permission_context.permission_granted()); |
| 122 EXPECT_TRUE(permission_context.tab_context_updated()); | 123 EXPECT_TRUE(permission_context.tab_context_updated()); |
| 123 | 124 |
| 124 ContentSetting setting = | 125 ContentSetting setting = |
| 125 profile()->GetHostContentSettingsMap()->GetContentSetting( | 126 profile()->GetHostContentSettingsMap()->GetContentSetting( |
| 126 url.GetOrigin(), url.GetOrigin(), | 127 url.GetOrigin(), url.GetOrigin(), |
| 127 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, std::string()); | 128 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, std::string()); |
| 128 EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); | 129 EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); |
| 129 } | 130 } |
| 130 | 131 |
| 131 void TestAskAndDismiss_TestContent() { | 132 void TestAskAndDismiss_TestContent() { |
| 132 TestPermissionContext permission_context( | 133 TestPermissionContext permission_context( |
| 133 profile(), CONTENT_SETTINGS_TYPE_MIDI_SYSEX); | 134 profile(), CONTENT_SETTINGS_TYPE_MIDI_SYSEX); |
| 134 GURL url("http://www.google.es"); | 135 GURL url("http://www.google.es"); |
| 135 content::WebContentsTester::For(web_contents())->NavigateAndCommit(url); | 136 content::WebContentsTester::For(web_contents())->NavigateAndCommit(url); |
| 136 | 137 |
| 137 const PermissionRequestID id( | 138 const PermissionRequestID id( |
| 138 web_contents()->GetRenderProcessHost()->GetID(), | 139 web_contents()->GetRenderProcessHost()->GetID(), |
| 139 web_contents()->GetRenderViewHost()->GetRoutingID(), | 140 web_contents()->GetMainFrame()->GetRoutingID(), |
| 140 -1, GURL()); | 141 -1, GURL()); |
| 141 permission_context.RequestPermission( | 142 permission_context.RequestPermission( |
| 142 web_contents(), | 143 web_contents(), |
| 143 id, url, true, | 144 id, url, true, |
| 144 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 145 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 145 base::Unretained(&permission_context))); | 146 base::Unretained(&permission_context))); |
| 146 | 147 |
| 147 RespondToPermission(&permission_context, id, url, false); | 148 RespondToPermission(&permission_context, id, url, false); |
| 148 EXPECT_TRUE(permission_context.permission_set()); | 149 EXPECT_TRUE(permission_context.permission_set()); |
| 149 EXPECT_FALSE(permission_context.permission_granted()); | 150 EXPECT_FALSE(permission_context.permission_granted()); |
| 150 EXPECT_TRUE(permission_context.tab_context_updated()); | 151 EXPECT_TRUE(permission_context.tab_context_updated()); |
| 151 | 152 |
| 152 ContentSetting setting = | 153 ContentSetting setting = |
| 153 profile()->GetHostContentSettingsMap()->GetContentSetting( | 154 profile()->GetHostContentSettingsMap()->GetContentSetting( |
| 154 url.GetOrigin(), url.GetOrigin(), | 155 url.GetOrigin(), url.GetOrigin(), |
| 155 CONTENT_SETTINGS_TYPE_MIDI_SYSEX, std::string()); | 156 CONTENT_SETTINGS_TYPE_MIDI_SYSEX, std::string()); |
| 156 EXPECT_EQ(CONTENT_SETTING_ASK, setting); | 157 EXPECT_EQ(CONTENT_SETTING_ASK, setting); |
| 157 } | 158 } |
| 158 | 159 |
| 159 void TestRequestPermissionInvalidUrl(ContentSettingsType type) { | 160 void TestRequestPermissionInvalidUrl(ContentSettingsType type) { |
| 160 TestPermissionContext permission_context(profile(), type); | 161 TestPermissionContext permission_context(profile(), type); |
| 161 GURL url; | 162 GURL url; |
| 162 ASSERT_FALSE(url.is_valid()); | 163 ASSERT_FALSE(url.is_valid()); |
| 163 content::WebContentsTester::For(web_contents())->NavigateAndCommit(url); | 164 content::WebContentsTester::For(web_contents())->NavigateAndCommit(url); |
| 164 | 165 |
| 165 const PermissionRequestID id( | 166 const PermissionRequestID id( |
| 166 web_contents()->GetRenderProcessHost()->GetID(), | 167 web_contents()->GetRenderProcessHost()->GetID(), |
| 167 web_contents()->GetRenderViewHost()->GetRoutingID(), | 168 web_contents()->GetMainFrame()->GetRoutingID(), |
| 168 -1, GURL()); | 169 -1, GURL()); |
| 169 permission_context.RequestPermission( | 170 permission_context.RequestPermission( |
| 170 web_contents(), | 171 web_contents(), |
| 171 id, url, true, | 172 id, url, true, |
| 172 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 173 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 173 base::Unretained(&permission_context))); | 174 base::Unretained(&permission_context))); |
| 174 | 175 |
| 175 EXPECT_TRUE(permission_context.permission_set()); | 176 EXPECT_TRUE(permission_context.permission_set()); |
| 176 EXPECT_FALSE(permission_context.permission_granted()); | 177 EXPECT_FALSE(permission_context.permission_granted()); |
| 177 EXPECT_TRUE(permission_context.tab_context_updated()); | 178 EXPECT_TRUE(permission_context.tab_context_updated()); |
| 178 | 179 |
| 179 ContentSetting setting = | 180 ContentSetting setting = |
| 180 profile()->GetHostContentSettingsMap()->GetContentSetting( | 181 profile()->GetHostContentSettingsMap()->GetContentSetting( |
| 181 url.GetOrigin(), url.GetOrigin(), type, std::string()); | 182 url.GetOrigin(), url.GetOrigin(), type, std::string()); |
| 182 EXPECT_EQ(CONTENT_SETTING_ASK, setting); | 183 EXPECT_EQ(CONTENT_SETTING_ASK, setting); |
| 183 } | 184 } |
| 184 | 185 |
| 185 void TestGrantAndRevoke_TestContent(ContentSettingsType type, | 186 void TestGrantAndRevoke_TestContent(ContentSettingsType type, |
| 186 ContentSetting expected_default) { | 187 ContentSetting expected_default) { |
| 187 TestPermissionContext permission_context(profile(), type); | 188 TestPermissionContext permission_context(profile(), type); |
| 188 GURL url("https://www.google.com"); | 189 GURL url("https://www.google.com"); |
| 189 content::WebContentsTester::For(web_contents())->NavigateAndCommit(url); | 190 content::WebContentsTester::For(web_contents())->NavigateAndCommit(url); |
| 190 | 191 |
| 191 const PermissionRequestID id( | 192 const PermissionRequestID id( |
| 192 web_contents()->GetRenderProcessHost()->GetID(), | 193 web_contents()->GetRenderProcessHost()->GetID(), |
| 193 web_contents()->GetRenderViewHost()->GetRoutingID(), | 194 web_contents()->GetMainFrame()->GetRoutingID(), |
| 194 -1, GURL()); | 195 -1, GURL()); |
| 195 permission_context.RequestPermission( | 196 permission_context.RequestPermission( |
| 196 web_contents(), | 197 web_contents(), |
| 197 id, url, true, | 198 id, url, true, |
| 198 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 199 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
| 199 base::Unretained(&permission_context))); | 200 base::Unretained(&permission_context))); |
| 200 | 201 |
| 201 RespondToPermission(&permission_context, id, url, true); | 202 RespondToPermission(&permission_context, id, url, true); |
| 202 EXPECT_TRUE(permission_context.permission_set()); | 203 EXPECT_TRUE(permission_context.permission_set()); |
| 203 EXPECT_TRUE(permission_context.permission_granted()); | 204 EXPECT_TRUE(permission_context.permission_granted()); |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 289 #endif | 290 #endif |
| 290 TestGrantAndRevoke_TestContent(CONTENT_SETTINGS_TYPE_MIDI_SYSEX, | 291 TestGrantAndRevoke_TestContent(CONTENT_SETTINGS_TYPE_MIDI_SYSEX, |
| 291 CONTENT_SETTING_ASK); | 292 CONTENT_SETTING_ASK); |
| 292 TestGrantAndRevoke_TestContent(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING, | 293 TestGrantAndRevoke_TestContent(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING, |
| 293 CONTENT_SETTING_ASK); | 294 CONTENT_SETTING_ASK); |
| 294 #if defined(OS_ANDROID) | 295 #if defined(OS_ANDROID) |
| 295 TestGrantAndRevoke_TestContent( | 296 TestGrantAndRevoke_TestContent( |
| 296 CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER, CONTENT_SETTING_ASK); | 297 CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER, CONTENT_SETTING_ASK); |
| 297 #endif | 298 #endif |
| 298 } | 299 } |
| OLD | NEW |