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

Side by Side Diff: chrome/browser/geolocation/geolocation_permission_context_unittest.cc

Issue 341833004: [WebsiteSettings] Enable permission bubbles by default. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
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 "chrome/browser/geolocation/geolocation_permission_context.h" 5 #include "chrome/browser/geolocation/geolocation_permission_context.h"
6 6
7 #include <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/containers/hash_tables.h" 12 #include "base/containers/hash_tables.h"
13 #include "base/memory/scoped_vector.h" 13 #include "base/memory/scoped_vector.h"
14 #include "base/run_loop.h" 14 #include "base/run_loop.h"
15 #include "base/synchronization/waitable_event.h" 15 #include "base/synchronization/waitable_event.h"
16 #include "base/test/simple_test_clock.h" 16 #include "base/test/simple_test_clock.h"
17 #include "base/time/clock.h" 17 #include "base/time/clock.h"
18 #include "chrome/browser/chrome_notification_types.h" 18 #include "chrome/browser/chrome_notification_types.h"
19 #include "chrome/browser/content_settings/host_content_settings_map.h" 19 #include "chrome/browser/content_settings/host_content_settings_map.h"
20 #include "chrome/browser/content_settings/permission_request_id.h" 20 #include "chrome/browser/content_settings/permission_request_id.h"
21 #include "chrome/browser/content_settings/tab_specific_content_settings.h" 21 #include "chrome/browser/content_settings/tab_specific_content_settings.h"
22 #include "chrome/browser/geolocation/geolocation_permission_context_factory.h" 22 #include "chrome/browser/geolocation/geolocation_permission_context_factory.h"
23 #include "chrome/browser/infobars/infobar_service.h" 23 #include "chrome/browser/infobars/infobar_service.h"
24 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h"
25 #include "chrome/browser/ui/website_settings/permission_bubble_request.h"
26 #include "chrome/browser/ui/website_settings/permission_bubble_view.h"
24 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 27 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
25 #include "chrome/test/base/testing_profile.h" 28 #include "chrome/test/base/testing_profile.h"
26 #include "components/infobars/core/confirm_infobar_delegate.h" 29 #include "components/infobars/core/confirm_infobar_delegate.h"
27 #include "components/infobars/core/infobar.h" 30 #include "components/infobars/core/infobar.h"
28 #include "content/public/browser/browser_thread.h" 31 #include "content/public/browser/browser_thread.h"
29 #include "content/public/browser/navigation_details.h" 32 #include "content/public/browser/navigation_details.h"
30 #include "content/public/browser/notification_registrar.h" 33 #include "content/public/browser/notification_registrar.h"
31 #include "content/public/browser/notification_service.h" 34 #include "content/public/browser/notification_service.h"
32 #include "content/public/browser/web_contents.h" 35 #include "content/public/browser/web_contents.h"
33 #include "content/public/test/mock_render_process_host.h" 36 #include "content/public/test/mock_render_process_host.h"
34 #include "content/public/test/test_renderer_host.h" 37 #include "content/public/test/test_renderer_host.h"
38 #include "content/public/test/test_utils.h"
35 #include "content/public/test/web_contents_tester.h" 39 #include "content/public/test/web_contents_tester.h"
36 #include "testing/gtest/include/gtest/gtest.h" 40 #include "testing/gtest/include/gtest/gtest.h"
37 41
38 #if defined(OS_ANDROID) 42 #if defined(OS_ANDROID)
39 #include "base/prefs/pref_service.h" 43 #include "base/prefs/pref_service.h"
40 #include "chrome/browser/android/mock_google_location_settings_helper.h" 44 #include "chrome/browser/android/mock_google_location_settings_helper.h"
41 #include "chrome/common/pref_names.h" 45 #include "chrome/common/pref_names.h"
42 #endif 46 #endif
43 47
44 #if defined(ENABLE_EXTENSIONS) 48 #if defined(ENABLE_EXTENSIONS)
45 #include "extensions/browser/view_type_utils.h" 49 #include "extensions/browser/view_type_utils.h"
46 #endif 50 #endif
47 51
48 using content::MockRenderProcessHost; 52 using content::MockRenderProcessHost;
49 53
54 class MockPermissionBubbleView : public PermissionBubbleView {
55 public:
56 MockPermissionBubbleView() : shown_(false) {}
57 virtual ~MockPermissionBubbleView() {}
58
59 virtual void SetDelegate(Delegate* delegate) OVERRIDE {
60 }
61
62 virtual void Show(
63 const std::vector<PermissionBubbleRequest*>& requests,
64 const std::vector<bool>& accept_state,
65 bool customization_mode) OVERRIDE {
66 LOG(INFO) << "Showing view... " << requests[0]->GetMessageText();
67 shown_ = true;
68 }
69
70 virtual bool CanAcceptRequestUpdate() OVERRIDE {
71 return true;
72 }
73
74 virtual void Hide() OVERRIDE {
75 shown_ = false;
76 }
77
78 virtual bool IsVisible() OVERRIDE {
79 return shown_;
80 }
81
82 private:
83 bool shown_;
84 };
50 85
51 // ClosedInfoBarTracker ------------------------------------------------------- 86 // ClosedInfoBarTracker -------------------------------------------------------
52 87
53 // We need to track which infobars were closed. 88 // We need to track which infobars were closed.
54 class ClosedInfoBarTracker : public content::NotificationObserver { 89 class ClosedInfoBarTracker : public content::NotificationObserver {
55 public: 90 public:
56 ClosedInfoBarTracker(); 91 ClosedInfoBarTracker();
57 virtual ~ClosedInfoBarTracker(); 92 virtual ~ClosedInfoBarTracker();
58 93
59 // content::NotificationObserver: 94 // content::NotificationObserver:
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 PermissionRequestID RequestIDForTab(int tab, int bridge_id); 146 PermissionRequestID RequestIDForTab(int tab, int bridge_id);
112 InfoBarService* infobar_service() { 147 InfoBarService* infobar_service() {
113 return InfoBarService::FromWebContents(web_contents()); 148 return InfoBarService::FromWebContents(web_contents());
114 } 149 }
115 InfoBarService* infobar_service_for_tab(int tab) { 150 InfoBarService* infobar_service_for_tab(int tab) {
116 return InfoBarService::FromWebContents(extra_tabs_[tab]); 151 return InfoBarService::FromWebContents(extra_tabs_[tab]);
117 } 152 }
118 153
119 void RequestGeolocationPermission(content::WebContents* web_contents, 154 void RequestGeolocationPermission(content::WebContents* web_contents,
120 const PermissionRequestID& id, 155 const PermissionRequestID& id,
121 const GURL& requesting_frame); 156 const GURL& requesting_frame,
157 bool user_gesture);
122 void RequestGeolocationPermission(content::WebContents* web_contents, 158 void RequestGeolocationPermission(content::WebContents* web_contents,
123 const PermissionRequestID& id, 159 const PermissionRequestID& id,
124 const GURL& requesting_frame, 160 const GURL& requesting_frame,
161 bool user_gesture,
125 base::Closure* cancel_callback); 162 base::Closure* cancel_callback);
126 void PermissionResponse(const PermissionRequestID& id, 163 void PermissionResponse(const PermissionRequestID& id,
127 bool allowed); 164 bool allowed);
128 void CheckPermissionMessageSent(int bridge_id, bool allowed); 165 void CheckPermissionMessageSent(int bridge_id, bool allowed);
129 void CheckPermissionMessageSentForTab(int tab, int bridge_id, bool allowed); 166 void CheckPermissionMessageSentForTab(int tab, int bridge_id, bool allowed);
130 void CheckPermissionMessageSentInternal(MockRenderProcessHost* process, 167 void CheckPermissionMessageSentInternal(MockRenderProcessHost* process,
131 int bridge_id, 168 int bridge_id,
132 bool allowed); 169 bool allowed);
133 void AddNewTab(const GURL& url); 170 void AddNewTab(const GURL& url);
134 void CheckTabContentsState(const GURL& requesting_frame, 171 void CheckTabContentsState(const GURL& requesting_frame,
135 ContentSetting expected_content_setting); 172 ContentSetting expected_content_setting);
173 base::string16 GetFirstRequestText(PermissionBubbleManager* mgr);
174 int GetBubblesQueueSize(PermissionBubbleManager* mgr);
175 void AcceptBubble(PermissionBubbleManager* mgr);
176 void DenyBubble(PermissionBubbleManager* mgr);
177 void BubbleManagerDocumentLoadCompleted();
136 178
137 scoped_refptr<GeolocationPermissionContext> geolocation_permission_context_; 179 scoped_refptr<GeolocationPermissionContext> geolocation_permission_context_;
138 ClosedInfoBarTracker closed_infobar_tracker_; 180 ClosedInfoBarTracker closed_infobar_tracker_;
181 MockPermissionBubbleView bubble_view_;
139 ScopedVector<content::WebContents> extra_tabs_; 182 ScopedVector<content::WebContents> extra_tabs_;
140 183
141 // A map between renderer child id and a pair represending the bridge id and 184 // A map between renderer child id and a pair represending the bridge id and
142 // whether the requested permission was allowed. 185 // whether the requested permission was allowed.
143 base::hash_map<int, std::pair<int, bool> > responses_; 186 base::hash_map<int, std::pair<int, bool> > responses_;
144 }; 187 };
145 188
146 PermissionRequestID GeolocationPermissionContextTests::RequestID( 189 PermissionRequestID GeolocationPermissionContextTests::RequestID(
147 int bridge_id) { 190 int bridge_id) {
148 return PermissionRequestID( 191 return PermissionRequestID(
149 web_contents()->GetRenderProcessHost()->GetID(), 192 web_contents()->GetRenderProcessHost()->GetID(),
150 web_contents()->GetRenderViewHost()->GetRoutingID(), 193 web_contents()->GetRenderViewHost()->GetRoutingID(),
151 bridge_id, 194 bridge_id,
152 GURL()); 195 GURL());
153 } 196 }
154 197
155 PermissionRequestID GeolocationPermissionContextTests::RequestIDForTab( 198 PermissionRequestID GeolocationPermissionContextTests::RequestIDForTab(
156 int tab, 199 int tab,
157 int bridge_id) { 200 int bridge_id) {
158 return PermissionRequestID( 201 return PermissionRequestID(
159 extra_tabs_[tab]->GetRenderProcessHost()->GetID(), 202 extra_tabs_[tab]->GetRenderProcessHost()->GetID(),
160 extra_tabs_[tab]->GetRenderViewHost()->GetRoutingID(), 203 extra_tabs_[tab]->GetRenderViewHost()->GetRoutingID(),
161 bridge_id, 204 bridge_id,
162 GURL()); 205 GURL());
163 } 206 }
164 207
165 void GeolocationPermissionContextTests::RequestGeolocationPermission( 208 void GeolocationPermissionContextTests::RequestGeolocationPermission(
166 content::WebContents* web_contents, 209 content::WebContents* web_contents,
167 const PermissionRequestID& id, 210 const PermissionRequestID& id,
168 const GURL& requesting_frame) { 211 const GURL& requesting_frame,
169 RequestGeolocationPermission(web_contents, id, requesting_frame, NULL); 212 bool user_gesture) {
213 RequestGeolocationPermission(web_contents, id, requesting_frame,
214 user_gesture, NULL);
170 } 215 }
171 216
172 void GeolocationPermissionContextTests::RequestGeolocationPermission( 217 void GeolocationPermissionContextTests::RequestGeolocationPermission(
173 content::WebContents* web_contents, 218 content::WebContents* web_contents,
174 const PermissionRequestID& id, 219 const PermissionRequestID& id,
175 const GURL& requesting_frame, 220 const GURL& requesting_frame,
221 bool user_gesture,
176 base::Closure* cancel_callback) { 222 base::Closure* cancel_callback) {
177 geolocation_permission_context_->RequestGeolocationPermission( 223 geolocation_permission_context_->RequestGeolocationPermission(
178 web_contents, id.bridge_id(), requesting_frame, false, 224 web_contents, id.bridge_id(), requesting_frame, user_gesture,
179 base::Bind(&GeolocationPermissionContextTests::PermissionResponse, 225 base::Bind(&GeolocationPermissionContextTests::PermissionResponse,
180 base::Unretained(this), id), 226 base::Unretained(this), id),
181 cancel_callback); 227 cancel_callback);
182 content::BrowserThread::GetBlockingPool()->FlushForTesting(); 228 content::BrowserThread::GetBlockingPool()->FlushForTesting();
183 base::RunLoop().RunUntilIdle(); 229 base::RunLoop().RunUntilIdle();
184 } 230 }
185 231
186 void GeolocationPermissionContextTests::PermissionResponse( 232 void GeolocationPermissionContextTests::PermissionResponse(
187 const PermissionRequestID& id, 233 const PermissionRequestID& id,
188 bool allowed) { 234 bool allowed) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 extra_tabs_.push_back(new_tab); 277 extra_tabs_.push_back(new_tab);
232 } 278 }
233 279
234 void GeolocationPermissionContextTests::CheckTabContentsState( 280 void GeolocationPermissionContextTests::CheckTabContentsState(
235 const GURL& requesting_frame, 281 const GURL& requesting_frame,
236 ContentSetting expected_content_setting) { 282 ContentSetting expected_content_setting) {
237 TabSpecificContentSettings* content_settings = 283 TabSpecificContentSettings* content_settings =
238 TabSpecificContentSettings::FromWebContents(web_contents()); 284 TabSpecificContentSettings::FromWebContents(web_contents());
239 const ContentSettingsUsagesState::StateMap& state_map = 285 const ContentSettingsUsagesState::StateMap& state_map =
240 content_settings->geolocation_usages_state().state_map(); 286 content_settings->geolocation_usages_state().state_map();
241 EXPECT_EQ(1U, state_map.count(requesting_frame.GetOrigin())); 287 EXPECT_EQ(1U, state_map.count(requesting_frame.GetOrigin()))
242 EXPECT_EQ(0U, state_map.count(requesting_frame)); 288 << " for " << requesting_frame.spec();
289 EXPECT_EQ(0U, state_map.count(requesting_frame))
290 << " for " << requesting_frame.spec();
243 ContentSettingsUsagesState::StateMap::const_iterator settings = 291 ContentSettingsUsagesState::StateMap::const_iterator settings =
244 state_map.find(requesting_frame.GetOrigin()); 292 state_map.find(requesting_frame.GetOrigin());
245 ASSERT_FALSE(settings == state_map.end()) 293 ASSERT_FALSE(settings == state_map.end())
246 << "geolocation state not found " << requesting_frame; 294 << "geolocation state not found " << requesting_frame;
247 EXPECT_EQ(expected_content_setting, settings->second); 295 EXPECT_EQ(expected_content_setting, settings->second)
296 << " for " << requesting_frame.spec();
248 } 297 }
249 298
250 void GeolocationPermissionContextTests::SetUp() { 299 void GeolocationPermissionContextTests::SetUp() {
251 ChromeRenderViewHostTestHarness::SetUp(); 300 ChromeRenderViewHostTestHarness::SetUp();
252 301
253 // Set up required helpers, and make this be as "tabby" as the code requires. 302 // Set up required helpers, and make this be as "tabby" as the code requires.
254 #if defined(ENABLE_EXTENSIONS) 303 #if defined(ENABLE_EXTENSIONS)
255 extensions::SetViewType(web_contents(), extensions::VIEW_TYPE_TAB_CONTENTS); 304 extensions::SetViewType(web_contents(), extensions::VIEW_TYPE_TAB_CONTENTS);
256 #endif 305 #endif
257 InfoBarService::CreateForWebContents(web_contents()); 306 InfoBarService::CreateForWebContents(web_contents());
258 TabSpecificContentSettings::CreateForWebContents(web_contents()); 307 TabSpecificContentSettings::CreateForWebContents(web_contents());
259 #if defined(OS_ANDROID) 308 #if defined(OS_ANDROID)
260 MockGoogleLocationSettingsHelper::SetLocationStatus(true, true); 309 MockGoogleLocationSettingsHelper::SetLocationStatus(true, true);
261 #endif 310 #endif
262 geolocation_permission_context_ = 311 geolocation_permission_context_ =
263 GeolocationPermissionContextFactory::GetForProfile(profile()); 312 GeolocationPermissionContextFactory::GetForProfile(profile());
313
314 PermissionBubbleManager::CreateForWebContents(web_contents());
315 PermissionBubbleManager::FromWebContents(web_contents())->SetView(
316 &bubble_view_);
264 } 317 }
265 318
266 void GeolocationPermissionContextTests::TearDown() { 319 void GeolocationPermissionContextTests::TearDown() {
267 extra_tabs_.clear(); 320 extra_tabs_.clear();
268 ChromeRenderViewHostTestHarness::TearDown(); 321 ChromeRenderViewHostTestHarness::TearDown();
269 } 322 }
270 323
324 base::string16 GeolocationPermissionContextTests::GetFirstRequestText(
325 PermissionBubbleManager* mgr) {
326 return mgr->requests_.front()->GetMessageText();
327 }
328
329 int GeolocationPermissionContextTests::GetBubblesQueueSize(
330 PermissionBubbleManager* mgr) {
331 return static_cast<int>(mgr->requests_.size());
332 }
333
334 void GeolocationPermissionContextTests::AcceptBubble(
335 PermissionBubbleManager* mgr) {
336 mgr->Accept();
337 }
338
339 void GeolocationPermissionContextTests::DenyBubble(
340 PermissionBubbleManager* mgr) {
341 mgr->Deny();
342 }
343
344 void GeolocationPermissionContextTests::BubbleManagerDocumentLoadCompleted() {
345 PermissionBubbleManager::FromWebContents(web_contents())->
346 DocumentOnLoadCompletedInMainFrame();
347 }
348
271 // Tests ---------------------------------------------------------------------- 349 // Tests ----------------------------------------------------------------------
272 350
273 TEST_F(GeolocationPermissionContextTests, SinglePermission) { 351 TEST_F(GeolocationPermissionContextTests, SinglePermissionInfobar) {
352 if (PermissionBubbleManager::Enabled())
353 return;
354
274 GURL requesting_frame("http://www.example.com/geolocation"); 355 GURL requesting_frame("http://www.example.com/geolocation");
275 NavigateAndCommit(requesting_frame); 356 NavigateAndCommit(requesting_frame);
276 EXPECT_EQ(0U, infobar_service()->infobar_count()); 357 EXPECT_EQ(0U, infobar_service()->infobar_count());
277 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); 358 RequestGeolocationPermission(
359 web_contents(), RequestID(0), requesting_frame, true);
278 ASSERT_EQ(1U, infobar_service()->infobar_count()); 360 ASSERT_EQ(1U, infobar_service()->infobar_count());
279 infobars::InfoBar* infobar = infobar_service()->infobar_at(0); 361 infobars::InfoBar* infobar = infobar_service()->infobar_at(0);
280 ConfirmInfoBarDelegate* infobar_delegate = 362 ConfirmInfoBarDelegate* infobar_delegate =
281 infobar->delegate()->AsConfirmInfoBarDelegate(); 363 infobar->delegate()->AsConfirmInfoBarDelegate();
282 ASSERT_TRUE(infobar_delegate); 364 ASSERT_TRUE(infobar_delegate);
283 infobar_delegate->Cancel(); 365 infobar_delegate->Cancel();
284 infobar_service()->RemoveInfoBar(infobar); 366 infobar_service()->RemoveInfoBar(infobar);
285 EXPECT_EQ(1U, closed_infobar_tracker_.size()); 367 EXPECT_EQ(1U, closed_infobar_tracker_.size());
286 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar)); 368 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar));
287 } 369 }
288 370
371 TEST_F(GeolocationPermissionContextTests, SinglePermissionBubble) {
372 if (!PermissionBubbleManager::Enabled())
373 return;
374
375 GURL requesting_frame("http://www.example.com/geolocation");
376 NavigateAndCommit(requesting_frame);
377 BubbleManagerDocumentLoadCompleted();
378 EXPECT_EQ(0U, infobar_service()->infobar_count());
379 RequestGeolocationPermission(
380 web_contents(), RequestID(0), requesting_frame, true);
381 PermissionBubbleManager* mgr =
382 PermissionBubbleManager::FromWebContents(web_contents());
383 ASSERT_EQ(1, GetBubblesQueueSize(mgr));
384 }
385
289 #if defined(OS_ANDROID) 386 #if defined(OS_ANDROID)
290 TEST_F(GeolocationPermissionContextTests, GeolocationEnabledDisabled) { 387 TEST_F(GeolocationPermissionContextTests, GeolocationEnabledDisabled) {
291 GURL requesting_frame("http://www.example.com/geolocation"); 388 GURL requesting_frame("http://www.example.com/geolocation");
292 NavigateAndCommit(requesting_frame); 389 NavigateAndCommit(requesting_frame);
293 MockGoogleLocationSettingsHelper::SetLocationStatus(true, true); 390 MockGoogleLocationSettingsHelper::SetLocationStatus(true, true);
294 EXPECT_EQ(0U, infobar_service()->infobar_count()); 391 EXPECT_EQ(0U, infobar_service()->infobar_count());
295 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); 392 RequestGeolocationPermission(
393 web_contents(), RequestID(0), requesting_frame, true);
296 EXPECT_EQ(1U, infobar_service()->infobar_count()); 394 EXPECT_EQ(1U, infobar_service()->infobar_count());
297 ConfirmInfoBarDelegate* infobar_delegate_0 = 395 ConfirmInfoBarDelegate* infobar_delegate_0 =
298 infobar_service()->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate(); 396 infobar_service()->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate();
299 ASSERT_TRUE(infobar_delegate_0); 397 ASSERT_TRUE(infobar_delegate_0);
300 base::string16 text_0 = infobar_delegate_0->GetButtonLabel( 398 base::string16 text_0 = infobar_delegate_0->GetButtonLabel(
301 ConfirmInfoBarDelegate::BUTTON_OK); 399 ConfirmInfoBarDelegate::BUTTON_OK);
302 400
303 Reload(); 401 Reload();
304 MockGoogleLocationSettingsHelper::SetLocationStatus(true, false); 402 MockGoogleLocationSettingsHelper::SetLocationStatus(true, false);
305 EXPECT_EQ(0U, infobar_service()->infobar_count()); 403 EXPECT_EQ(0U, infobar_service()->infobar_count());
306 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); 404 RequestGeolocationPermission(
405 web_contents(), RequestID(0), requesting_frame, true);
307 EXPECT_EQ(0U, infobar_service()->infobar_count()); 406 EXPECT_EQ(0U, infobar_service()->infobar_count());
308 } 407 }
309 408
310 TEST_F(GeolocationPermissionContextTests, MasterEnabledGoogleAppsEnabled) { 409 TEST_F(GeolocationPermissionContextTests, MasterEnabledGoogleAppsEnabled) {
311 GURL requesting_frame("http://www.example.com/geolocation"); 410 GURL requesting_frame("http://www.example.com/geolocation");
312 NavigateAndCommit(requesting_frame); 411 NavigateAndCommit(requesting_frame);
313 MockGoogleLocationSettingsHelper::SetLocationStatus(true, true); 412 MockGoogleLocationSettingsHelper::SetLocationStatus(true, true);
314 EXPECT_EQ(0U, infobar_service()->infobar_count()); 413 EXPECT_EQ(0U, infobar_service()->infobar_count());
315 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); 414 RequestGeolocationPermission(
415 web_contents(), RequestID(0), requesting_frame, true);
316 EXPECT_EQ(1U, infobar_service()->infobar_count()); 416 EXPECT_EQ(1U, infobar_service()->infobar_count());
317 ConfirmInfoBarDelegate* infobar_delegate = 417 ConfirmInfoBarDelegate* infobar_delegate =
318 infobar_service()->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate(); 418 infobar_service()->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate();
319 ASSERT_TRUE(infobar_delegate); 419 ASSERT_TRUE(infobar_delegate);
320 infobar_delegate->Accept(); 420 infobar_delegate->Accept();
321 CheckTabContentsState(requesting_frame, CONTENT_SETTING_ALLOW); 421 CheckTabContentsState(requesting_frame, CONTENT_SETTING_ALLOW);
322 CheckPermissionMessageSent(0, true); 422 CheckPermissionMessageSent(0, true);
323 } 423 }
324 424
325 TEST_F(GeolocationPermissionContextTests, MasterEnabledGoogleAppsDisabled) { 425 TEST_F(GeolocationPermissionContextTests, MasterEnabledGoogleAppsDisabled) {
326 GURL requesting_frame("http://www.example.com/geolocation"); 426 GURL requesting_frame("http://www.example.com/geolocation");
327 NavigateAndCommit(requesting_frame); 427 NavigateAndCommit(requesting_frame);
328 MockGoogleLocationSettingsHelper::SetLocationStatus(true, false); 428 MockGoogleLocationSettingsHelper::SetLocationStatus(true, false);
329 EXPECT_EQ(0U, infobar_service()->infobar_count()); 429 EXPECT_EQ(0U, infobar_service()->infobar_count());
330 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); 430 RequestGeolocationPermission(
431 web_contents(), RequestID(0), requesting_frame, true);
331 EXPECT_EQ(0U, infobar_service()->infobar_count()); 432 EXPECT_EQ(0U, infobar_service()->infobar_count());
332 } 433 }
333 #endif 434 #endif
334 435
335 TEST_F(GeolocationPermissionContextTests, QueuedPermission) { 436 TEST_F(GeolocationPermissionContextTests, QueuedPermissionInfobar) {
437 if (PermissionBubbleManager::Enabled())
438 return;
439
336 GURL requesting_frame_0("http://www.example.com/geolocation"); 440 GURL requesting_frame_0("http://www.example.com/geolocation");
337 GURL requesting_frame_1("http://www.example-2.com/geolocation"); 441 GURL requesting_frame_1("http://www.example-2.com/geolocation");
338 EXPECT_EQ(CONTENT_SETTING_ASK, 442 EXPECT_EQ(CONTENT_SETTING_ASK,
339 profile()->GetHostContentSettingsMap()->GetContentSetting( 443 profile()->GetHostContentSettingsMap()->GetContentSetting(
340 requesting_frame_0, requesting_frame_0, 444 requesting_frame_0, requesting_frame_0,
341 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string())); 445 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
342 EXPECT_EQ(CONTENT_SETTING_ASK, 446 EXPECT_EQ(CONTENT_SETTING_ASK,
343 profile()->GetHostContentSettingsMap()->GetContentSetting( 447 profile()->GetHostContentSettingsMap()->GetContentSetting(
344 requesting_frame_1, requesting_frame_0, 448 requesting_frame_1, requesting_frame_0,
345 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string())); 449 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
346 450
347 NavigateAndCommit(requesting_frame_0); 451 NavigateAndCommit(requesting_frame_0);
348 EXPECT_EQ(0U, infobar_service()->infobar_count()); 452 EXPECT_EQ(0U, infobar_service()->infobar_count());
349 // Request permission for two frames. 453 // Request permission for two frames.
350 RequestGeolocationPermission( 454 RequestGeolocationPermission(
351 web_contents(), RequestID(0), requesting_frame_0); 455 web_contents(), RequestID(0), requesting_frame_0, true);
352 RequestGeolocationPermission( 456 RequestGeolocationPermission(
353 web_contents(), RequestID(1), requesting_frame_1); 457 web_contents(), RequestID(1), requesting_frame_1, true);
354 // Ensure only one infobar is created. 458 // Ensure only one infobar is created.
355 ASSERT_EQ(1U, infobar_service()->infobar_count()); 459 ASSERT_EQ(1U, infobar_service()->infobar_count());
356 infobars::InfoBar* infobar_0 = infobar_service()->infobar_at(0); 460 infobars::InfoBar* infobar_0 = infobar_service()->infobar_at(0);
357 ConfirmInfoBarDelegate* infobar_delegate_0 = 461 ConfirmInfoBarDelegate* infobar_delegate_0 =
358 infobar_0->delegate()->AsConfirmInfoBarDelegate(); 462 infobar_0->delegate()->AsConfirmInfoBarDelegate();
359 ASSERT_TRUE(infobar_delegate_0); 463 ASSERT_TRUE(infobar_delegate_0);
360 base::string16 text_0 = infobar_delegate_0->GetMessageText(); 464 base::string16 text_0 = infobar_delegate_0->GetMessageText();
361 465
362 // Accept the first frame. 466 // Accept the first frame.
363 infobar_delegate_0->Accept(); 467 infobar_delegate_0->Accept();
(...skipping 27 matching lines...) Expand all
391 profile()->GetHostContentSettingsMap()->GetContentSetting( 495 profile()->GetHostContentSettingsMap()->GetContentSetting(
392 requesting_frame_0, requesting_frame_0, 496 requesting_frame_0, requesting_frame_0,
393 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string())); 497 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
394 498
395 EXPECT_EQ(CONTENT_SETTING_BLOCK, 499 EXPECT_EQ(CONTENT_SETTING_BLOCK,
396 profile()->GetHostContentSettingsMap()->GetContentSetting( 500 profile()->GetHostContentSettingsMap()->GetContentSetting(
397 requesting_frame_1, requesting_frame_0, 501 requesting_frame_1, requesting_frame_0,
398 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string())); 502 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
399 } 503 }
400 504
401 TEST_F(GeolocationPermissionContextTests, HashIsIgnored) { 505 TEST_F(GeolocationPermissionContextTests, QueuedPermissionBubble) {
506 if (!PermissionBubbleManager::Enabled())
507 return;
508
509 GURL requesting_frame_0("http://www.example.com/geolocation");
510 GURL requesting_frame_1("http://www.example-2.com/geolocation");
511 EXPECT_EQ(CONTENT_SETTING_ASK,
512 profile()->GetHostContentSettingsMap()->GetContentSetting(
513 requesting_frame_0, requesting_frame_0,
514 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
515 EXPECT_EQ(CONTENT_SETTING_ASK,
516 profile()->GetHostContentSettingsMap()->GetContentSetting(
517 requesting_frame_1, requesting_frame_0,
518 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
519
520 NavigateAndCommit(requesting_frame_0);
521 BubbleManagerDocumentLoadCompleted();
522
523 PermissionBubbleManager* mgr =
524 PermissionBubbleManager::FromWebContents(web_contents());
525 ASSERT_EQ(0, GetBubblesQueueSize(mgr));
526
527 // Request permission for two frames.
528 RequestGeolocationPermission(
529 web_contents(), RequestID(0), requesting_frame_0, true);
530 RequestGeolocationPermission(
531 web_contents(), RequestID(1), requesting_frame_1, true);
532 // Only main frame permission shown.
533 ASSERT_EQ(1, GetBubblesQueueSize(mgr));
534 base::string16 text_0 = GetFirstRequestText(mgr);
535
536 // Accept the first frame.
537 AcceptBubble(mgr);
538 CheckTabContentsState(requesting_frame_0, CONTENT_SETTING_ALLOW);
539 CheckPermissionMessageSent(0, true);
540
541 // Now we should have a new bubble for the second frame.
542 EXPECT_EQ(1, GetBubblesQueueSize(mgr));
543
544 base::string16 text_1 = GetFirstRequestText(mgr);
545 EXPECT_NE(text_0, text_1);
546
547 // Cancel (block) this frame.
548 DenyBubble(mgr);
549 CheckTabContentsState(requesting_frame_1, CONTENT_SETTING_BLOCK);
550 CheckPermissionMessageSent(1, false);
551
552 // Ensure the persisted permissions are ok.
553 EXPECT_EQ(CONTENT_SETTING_ALLOW,
554 profile()->GetHostContentSettingsMap()->GetContentSetting(
555 requesting_frame_0, requesting_frame_0,
556 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
557
558 EXPECT_EQ(CONTENT_SETTING_BLOCK,
559 profile()->GetHostContentSettingsMap()->GetContentSetting(
560 requesting_frame_1, requesting_frame_0,
561 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
562 }
563
564 TEST_F(GeolocationPermissionContextTests, UrlFragmentIsIgnoredInfobar) {
565 if (PermissionBubbleManager::Enabled())
566 return;
567
402 GURL url_a("http://www.example.com/geolocation#a"); 568 GURL url_a("http://www.example.com/geolocation#a");
403 GURL url_b("http://www.example.com/geolocation#b"); 569 GURL url_b("http://www.example.com/geolocation#b");
404 570
405 // Navigate to the first url and check permission is requested. 571 // Navigate to the first url and check permission is requested.
406 NavigateAndCommit(url_a); 572 NavigateAndCommit(url_a);
407 EXPECT_EQ(0U, infobar_service()->infobar_count()); 573 EXPECT_EQ(0U, infobar_service()->infobar_count());
408 RequestGeolocationPermission(web_contents(), RequestID(0), url_a); 574 RequestGeolocationPermission(web_contents(), RequestID(0), url_a, true);
409 ASSERT_EQ(1U, infobar_service()->infobar_count()); 575 ASSERT_EQ(1U, infobar_service()->infobar_count());
410 infobars::InfoBar* infobar = infobar_service()->infobar_at(0); 576 infobars::InfoBar* infobar = infobar_service()->infobar_at(0);
411 ConfirmInfoBarDelegate* infobar_delegate = 577 ConfirmInfoBarDelegate* infobar_delegate =
412 infobar->delegate()->AsConfirmInfoBarDelegate(); 578 infobar->delegate()->AsConfirmInfoBarDelegate();
413 ASSERT_TRUE(infobar_delegate); 579 ASSERT_TRUE(infobar_delegate);
414 580
415 // Change the hash, we'll still be on the same page. 581 // Change the hash, we'll still be on the same page.
416 NavigateAndCommit(url_b); 582 NavigateAndCommit(url_b);
417 583
418 // Accept. 584 // Accept.
419 infobar_delegate->Accept(); 585 infobar_delegate->Accept();
420 CheckTabContentsState(url_a, CONTENT_SETTING_ALLOW); 586 CheckTabContentsState(url_a, CONTENT_SETTING_ALLOW);
421 CheckTabContentsState(url_b, CONTENT_SETTING_ALLOW); 587 CheckTabContentsState(url_b, CONTENT_SETTING_ALLOW);
422 CheckPermissionMessageSent(0, true); 588 CheckPermissionMessageSent(0, true);
423 589
424 // Cleanup. 590 // Cleanup.
425 infobar_service()->RemoveInfoBar(infobar); 591 infobar_service()->RemoveInfoBar(infobar);
426 EXPECT_EQ(1U, closed_infobar_tracker_.size()); 592 EXPECT_EQ(1U, closed_infobar_tracker_.size());
427 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar)); 593 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar));
428 } 594 }
429 595
430 TEST_F(GeolocationPermissionContextTests, PermissionForFileScheme) { 596 TEST_F(GeolocationPermissionContextTests, UrlFragmentIsIgnoredBubble) {
597 if (!PermissionBubbleManager::Enabled())
598 return;
599
600 GURL url_a("http://www.example.com/geolocation#a");
601 GURL url_b("http://www.example.com/geolocation#b");
602
603 // Navigate to the first url and check permission is requested.
604 NavigateAndCommit(url_a);
605 BubbleManagerDocumentLoadCompleted();
606
607 PermissionBubbleManager* mgr =
608 PermissionBubbleManager::FromWebContents(web_contents());
609 ASSERT_EQ(0, GetBubblesQueueSize(mgr));
610
611 RequestGeolocationPermission(web_contents(), RequestID(0), url_a, true);
612 ASSERT_EQ(1, GetBubblesQueueSize(mgr));
613
614 // Change the hash, we'll still be on the same page.
615 NavigateAndCommit(url_b);
616 BubbleManagerDocumentLoadCompleted();
617 ASSERT_EQ(1, GetBubblesQueueSize(mgr));
618
619 // Accept.
620 AcceptBubble(mgr);
621 CheckTabContentsState(url_a, CONTENT_SETTING_ALLOW);
622 CheckTabContentsState(url_b, CONTENT_SETTING_ALLOW);
623 CheckPermissionMessageSent(0, true);
624 }
625
626 TEST_F(GeolocationPermissionContextTests, PermissionForFileSchemeInfobars) {
627 if (PermissionBubbleManager::Enabled())
628 return;
629
431 GURL requesting_frame("file://example/geolocation.html"); 630 GURL requesting_frame("file://example/geolocation.html");
432 NavigateAndCommit(requesting_frame); 631 NavigateAndCommit(requesting_frame);
433 EXPECT_EQ(0U, infobar_service()->infobar_count()); 632 EXPECT_EQ(0U, infobar_service()->infobar_count());
434 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); 633 RequestGeolocationPermission(
634 web_contents(), RequestID(0), requesting_frame, true);
435 EXPECT_EQ(1U, infobar_service()->infobar_count()); 635 EXPECT_EQ(1U, infobar_service()->infobar_count());
436 infobars::InfoBar* infobar = infobar_service()->infobar_at(0); 636 infobars::InfoBar* infobar = infobar_service()->infobar_at(0);
437 ConfirmInfoBarDelegate* infobar_delegate = 637 ConfirmInfoBarDelegate* infobar_delegate =
438 infobar->delegate()->AsConfirmInfoBarDelegate(); 638 infobar->delegate()->AsConfirmInfoBarDelegate();
439 ASSERT_TRUE(infobar_delegate); 639 ASSERT_TRUE(infobar_delegate);
440 // Accept the frame. 640 // Accept the frame.
441 infobar_delegate->Accept(); 641 infobar_delegate->Accept();
442 CheckTabContentsState(requesting_frame, CONTENT_SETTING_ALLOW); 642 CheckTabContentsState(requesting_frame, CONTENT_SETTING_ALLOW);
443 CheckPermissionMessageSent(0, true); 643 CheckPermissionMessageSent(0, true);
444 infobar_service()->RemoveInfoBar(infobar); 644 infobar_service()->RemoveInfoBar(infobar);
445 645
446 // Make sure the setting is not stored. 646 // Make sure the setting is not stored.
447 EXPECT_EQ(CONTENT_SETTING_ASK, 647 EXPECT_EQ(CONTENT_SETTING_ASK,
448 profile()->GetHostContentSettingsMap()->GetContentSetting( 648 profile()->GetHostContentSettingsMap()->GetContentSetting(
449 requesting_frame, 649 requesting_frame,
450 requesting_frame, 650 requesting_frame,
451 CONTENT_SETTINGS_TYPE_GEOLOCATION, 651 CONTENT_SETTINGS_TYPE_GEOLOCATION,
452 std::string())); 652 std::string()));
453 } 653 }
454 654
455 TEST_F(GeolocationPermissionContextTests, CancelGeolocationPermissionRequest) { 655 TEST_F(GeolocationPermissionContextTests, PermissionForFileSchemeBubbles) {
656 if (!PermissionBubbleManager::Enabled())
657 return;
658
659 GURL requesting_frame("file://example/geolocation.html");
660 NavigateAndCommit(requesting_frame);
661 BubbleManagerDocumentLoadCompleted();
662
663 PermissionBubbleManager* mgr =
664 PermissionBubbleManager::FromWebContents(web_contents());
665 ASSERT_EQ(0, GetBubblesQueueSize(mgr));
666 RequestGeolocationPermission(
667 web_contents(), RequestID(0), requesting_frame, true);
668 ASSERT_EQ(1, GetBubblesQueueSize(mgr));
669
670 // Accept the frame.
671 AcceptBubble(mgr);
672 CheckTabContentsState(requesting_frame, CONTENT_SETTING_ALLOW);
673 CheckPermissionMessageSent(0, true);
674
675 // Make sure the setting is not stored.
676 EXPECT_EQ(CONTENT_SETTING_ASK,
677 profile()->GetHostContentSettingsMap()->GetContentSetting(
678 requesting_frame,
679 requesting_frame,
680 CONTENT_SETTINGS_TYPE_GEOLOCATION,
681 std::string()));
682 }
683
684 TEST_F(GeolocationPermissionContextTests,
685 CancelGeolocationPermissionRequestInfobar) {
686 if (PermissionBubbleManager::Enabled())
687 return;
688
456 GURL requesting_frame_0("http://www.example.com/geolocation"); 689 GURL requesting_frame_0("http://www.example.com/geolocation");
457 GURL requesting_frame_1("http://www.example-2.com/geolocation"); 690 GURL requesting_frame_1("http://www.example-2.com/geolocation");
458 EXPECT_EQ(CONTENT_SETTING_ASK, 691 EXPECT_EQ(CONTENT_SETTING_ASK,
459 profile()->GetHostContentSettingsMap()->GetContentSetting( 692 profile()->GetHostContentSettingsMap()->GetContentSetting(
460 requesting_frame_0, requesting_frame_0, 693 requesting_frame_0, requesting_frame_0,
461 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string())); 694 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
462 695
463 EXPECT_EQ(CONTENT_SETTING_ASK, 696 EXPECT_EQ(CONTENT_SETTING_ASK,
464 profile()->GetHostContentSettingsMap()->GetContentSetting( 697 profile()->GetHostContentSettingsMap()->GetContentSetting(
465 requesting_frame_1, requesting_frame_0, 698 requesting_frame_1, requesting_frame_0,
466 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string())); 699 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
467 700
468 NavigateAndCommit(requesting_frame_0); 701 NavigateAndCommit(requesting_frame_0);
469 EXPECT_EQ(0U, infobar_service()->infobar_count()); 702 EXPECT_EQ(0U, infobar_service()->infobar_count());
470 // Request permission for two frames. 703 // Request permission for two frames.
471 base::Closure cancel_callback; 704 base::Closure cancel_callback;
472 RequestGeolocationPermission( 705 RequestGeolocationPermission(
473 web_contents(), RequestID(0), requesting_frame_0, &cancel_callback); 706 web_contents(), RequestID(0), requesting_frame_0, true, &cancel_callback);
474 RequestGeolocationPermission( 707 RequestGeolocationPermission(
475 web_contents(), RequestID(1), requesting_frame_1); 708 web_contents(), RequestID(1), requesting_frame_1, true);
476 ASSERT_EQ(1U, infobar_service()->infobar_count()); 709 ASSERT_EQ(1U, infobar_service()->infobar_count());
477 710
478 infobars::InfoBar* infobar_0 = infobar_service()->infobar_at(0); 711 infobars::InfoBar* infobar_0 = infobar_service()->infobar_at(0);
479 ConfirmInfoBarDelegate* infobar_delegate_0 = 712 ConfirmInfoBarDelegate* infobar_delegate_0 =
480 infobar_0->delegate()->AsConfirmInfoBarDelegate(); 713 infobar_0->delegate()->AsConfirmInfoBarDelegate();
481 ASSERT_TRUE(infobar_delegate_0); 714 ASSERT_TRUE(infobar_delegate_0);
482 base::string16 text_0 = infobar_delegate_0->GetMessageText(); 715 base::string16 text_0 = infobar_delegate_0->GetMessageText();
483 716
484 // Simulate the frame going away, ensure the infobar for this frame 717 // Simulate the frame going away, ensure the infobar for this frame
485 // is removed and the next pending infobar is created. 718 // is removed and the next pending infobar is created.
(...skipping 23 matching lines...) Expand all
509 profile()->GetHostContentSettingsMap()->GetContentSetting( 742 profile()->GetHostContentSettingsMap()->GetContentSetting(
510 requesting_frame_0, requesting_frame_0, 743 requesting_frame_0, requesting_frame_0,
511 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string())); 744 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
512 745
513 EXPECT_EQ(CONTENT_SETTING_ALLOW, 746 EXPECT_EQ(CONTENT_SETTING_ALLOW,
514 profile()->GetHostContentSettingsMap()->GetContentSetting( 747 profile()->GetHostContentSettingsMap()->GetContentSetting(
515 requesting_frame_1, requesting_frame_0, 748 requesting_frame_1, requesting_frame_0,
516 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string())); 749 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
517 } 750 }
518 751
752 TEST_F(GeolocationPermissionContextTests,
753 CancelGeolocationPermissionRequestBubbles) {
754 if (!PermissionBubbleManager::Enabled())
755 return;
756
757 GURL requesting_frame_0("http://www.example.com/geolocation");
758 GURL requesting_frame_1("http://www.example-2.com/geolocation");
759 EXPECT_EQ(CONTENT_SETTING_ASK,
760 profile()->GetHostContentSettingsMap()->GetContentSetting(
761 requesting_frame_0, requesting_frame_0,
762 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
763
764 EXPECT_EQ(CONTENT_SETTING_ASK,
765 profile()->GetHostContentSettingsMap()->GetContentSetting(
766 requesting_frame_1, requesting_frame_0,
767 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
768
769 NavigateAndCommit(requesting_frame_0);
770 BubbleManagerDocumentLoadCompleted();
771 EXPECT_EQ(0U, infobar_service()->infobar_count());
772 // Request permission for two frames.
773 base::Closure cancel_callback;
774 RequestGeolocationPermission(
775 web_contents(), RequestID(0), requesting_frame_0, true, &cancel_callback);
776 RequestGeolocationPermission(
777 web_contents(), RequestID(1), requesting_frame_1, true);
778
779 PermissionBubbleManager* mgr =
780 PermissionBubbleManager::FromWebContents(web_contents());
781 ASSERT_TRUE(mgr != NULL);
782 ASSERT_EQ(1, GetBubblesQueueSize(mgr));
783 base::string16 text_0 = GetFirstRequestText(mgr);
784 ASSERT_NE(base::string16(), text_0);
785
786 // Cancel the request. This will still leave the bubble showing, since
787 // the request is showing in the view. It will just be dummied.
788 cancel_callback.Run();
789 AcceptBubble(mgr); // Dummy accept
790 base::string16 text_1 = GetFirstRequestText(mgr);
791 EXPECT_NE(text_0, text_1);
792
793 // Allow this frame.
794 AcceptBubble(mgr);
795 CheckTabContentsState(requesting_frame_1, CONTENT_SETTING_ALLOW);
796 CheckPermissionMessageSent(1, true);
797 EXPECT_EQ(0, GetBubblesQueueSize(mgr));
798
799 // Ensure the persisted permissions are ok.
800 EXPECT_EQ(CONTENT_SETTING_ASK,
801 profile()->GetHostContentSettingsMap()->GetContentSetting(
802 requesting_frame_0, requesting_frame_0,
803 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
804
805 EXPECT_EQ(CONTENT_SETTING_ALLOW,
806 profile()->GetHostContentSettingsMap()->GetContentSetting(
807 requesting_frame_1, requesting_frame_0,
808 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
809 }
810
519 TEST_F(GeolocationPermissionContextTests, InvalidURL) { 811 TEST_F(GeolocationPermissionContextTests, InvalidURL) {
520 GURL invalid_embedder("about:blank"); 812 GURL invalid_embedder("about:blank");
521 GURL requesting_frame; 813 GURL requesting_frame;
522 NavigateAndCommit(invalid_embedder); 814 NavigateAndCommit(invalid_embedder);
523 EXPECT_EQ(0U, infobar_service()->infobar_count()); 815 EXPECT_EQ(0U, infobar_service()->infobar_count());
524 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); 816 RequestGeolocationPermission(
817 web_contents(), RequestID(0), requesting_frame, true);
525 EXPECT_EQ(0U, infobar_service()->infobar_count()); 818 EXPECT_EQ(0U, infobar_service()->infobar_count());
526 CheckPermissionMessageSent(0, false); 819 CheckPermissionMessageSent(0, false);
527 } 820 }
528 821
529 TEST_F(GeolocationPermissionContextTests, SameOriginMultipleTabs) { 822 TEST_F(GeolocationPermissionContextTests, SameOriginMultipleTabsInfobar) {
823 if (PermissionBubbleManager::Enabled())
824 return;
825
530 GURL url_a("http://www.example.com/geolocation"); 826 GURL url_a("http://www.example.com/geolocation");
531 GURL url_b("http://www.example-2.com/geolocation"); 827 GURL url_b("http://www.example-2.com/geolocation");
532 NavigateAndCommit(url_a); 828 NavigateAndCommit(url_a);
533 AddNewTab(url_b); 829 AddNewTab(url_b);
534 AddNewTab(url_a); 830 AddNewTab(url_a);
535 831
536 EXPECT_EQ(0U, infobar_service()->infobar_count()); 832 EXPECT_EQ(0U, infobar_service()->infobar_count());
537 RequestGeolocationPermission(web_contents(), RequestID(0), url_a); 833 RequestGeolocationPermission(web_contents(), RequestID(0), url_a, true);
538 ASSERT_EQ(1U, infobar_service()->infobar_count()); 834 ASSERT_EQ(1U, infobar_service()->infobar_count());
539 835
540 RequestGeolocationPermission(extra_tabs_[0], RequestIDForTab(0, 0), url_b); 836 RequestGeolocationPermission(
837 extra_tabs_[0], RequestIDForTab(0, 0), url_b, true);
541 EXPECT_EQ(1U, infobar_service_for_tab(0)->infobar_count()); 838 EXPECT_EQ(1U, infobar_service_for_tab(0)->infobar_count());
542 839
543 RequestGeolocationPermission(extra_tabs_[1], RequestIDForTab(1, 0), url_a); 840 RequestGeolocationPermission(
841 extra_tabs_[1], RequestIDForTab(1, 0), url_a, true);
544 ASSERT_EQ(1U, infobar_service_for_tab(1)->infobar_count()); 842 ASSERT_EQ(1U, infobar_service_for_tab(1)->infobar_count());
545 843
546 infobars::InfoBar* removed_infobar = 844 infobars::InfoBar* removed_infobar =
547 infobar_service_for_tab(1)->infobar_at(0); 845 infobar_service_for_tab(1)->infobar_at(0);
548 846
549 // Accept the first tab. 847 // Accept the first tab.
550 infobars::InfoBar* infobar_0 = infobar_service()->infobar_at(0); 848 infobars::InfoBar* infobar_0 = infobar_service()->infobar_at(0);
551 ConfirmInfoBarDelegate* infobar_delegate_0 = 849 ConfirmInfoBarDelegate* infobar_delegate_0 =
552 infobar_0->delegate()->AsConfirmInfoBarDelegate(); 850 infobar_0->delegate()->AsConfirmInfoBarDelegate();
553 ASSERT_TRUE(infobar_delegate_0); 851 ASSERT_TRUE(infobar_delegate_0);
(...skipping 13 matching lines...) Expand all
567 infobars::InfoBar* infobar_1 = infobar_service_for_tab(0)->infobar_at(0); 865 infobars::InfoBar* infobar_1 = infobar_service_for_tab(0)->infobar_at(0);
568 ConfirmInfoBarDelegate* infobar_delegate_1 = 866 ConfirmInfoBarDelegate* infobar_delegate_1 =
569 infobar_1->delegate()->AsConfirmInfoBarDelegate(); 867 infobar_1->delegate()->AsConfirmInfoBarDelegate();
570 ASSERT_TRUE(infobar_delegate_1); 868 ASSERT_TRUE(infobar_delegate_1);
571 infobar_delegate_1->Cancel(); 869 infobar_delegate_1->Cancel();
572 infobar_service_for_tab(0)->RemoveInfoBar(infobar_1); 870 infobar_service_for_tab(0)->RemoveInfoBar(infobar_1);
573 EXPECT_EQ(1U, closed_infobar_tracker_.size()); 871 EXPECT_EQ(1U, closed_infobar_tracker_.size());
574 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_1)); 872 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_1));
575 } 873 }
576 874
577 TEST_F(GeolocationPermissionContextTests, QueuedOriginMultipleTabs) { 875 TEST_F(GeolocationPermissionContextTests, QueuedOriginMultipleTabsInfobar) {
876 if (PermissionBubbleManager::Enabled())
877 return;
878
578 GURL url_a("http://www.example.com/geolocation"); 879 GURL url_a("http://www.example.com/geolocation");
579 GURL url_b("http://www.example-2.com/geolocation"); 880 GURL url_b("http://www.example-2.com/geolocation");
580 NavigateAndCommit(url_a); 881 NavigateAndCommit(url_a);
581 AddNewTab(url_a); 882 AddNewTab(url_a);
582 883
583 EXPECT_EQ(0U, infobar_service()->infobar_count()); 884 EXPECT_EQ(0U, infobar_service()->infobar_count());
584 RequestGeolocationPermission(web_contents(), RequestID(0), url_a); 885 RequestGeolocationPermission(web_contents(), RequestID(0), url_a, true);
585 ASSERT_EQ(1U, infobar_service()->infobar_count()); 886 ASSERT_EQ(1U, infobar_service()->infobar_count());
586 887
587 RequestGeolocationPermission(extra_tabs_[0], RequestIDForTab(0, 0), url_a); 888 RequestGeolocationPermission(
889 extra_tabs_[0], RequestIDForTab(0, 0), url_a, true);
588 EXPECT_EQ(1U, infobar_service_for_tab(0)->infobar_count()); 890 EXPECT_EQ(1U, infobar_service_for_tab(0)->infobar_count());
589 891
590 RequestGeolocationPermission(extra_tabs_[0], RequestIDForTab(0, 1), url_b); 892 RequestGeolocationPermission(
893 extra_tabs_[0], RequestIDForTab(0, 1), url_b, true);
591 ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count()); 894 ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count());
592 895
593 infobars::InfoBar* removed_infobar = infobar_service()->infobar_at(0); 896 infobars::InfoBar* removed_infobar = infobar_service()->infobar_at(0);
594 897
595 // Accept the second tab. 898 // Accept the second tab.
596 infobars::InfoBar* infobar_0 = infobar_service_for_tab(0)->infobar_at(0); 899 infobars::InfoBar* infobar_0 = infobar_service_for_tab(0)->infobar_at(0);
597 ConfirmInfoBarDelegate* infobar_delegate_0 = 900 ConfirmInfoBarDelegate* infobar_delegate_0 =
598 infobar_0->delegate()->AsConfirmInfoBarDelegate(); 901 infobar_0->delegate()->AsConfirmInfoBarDelegate();
599 ASSERT_TRUE(infobar_delegate_0); 902 ASSERT_TRUE(infobar_delegate_0);
600 infobar_delegate_0->Accept(); 903 infobar_delegate_0->Accept();
(...skipping 15 matching lines...) Expand all
616 ConfirmInfoBarDelegate* infobar_delegate_1 = 919 ConfirmInfoBarDelegate* infobar_delegate_1 =
617 infobar_1->delegate()->AsConfirmInfoBarDelegate(); 920 infobar_1->delegate()->AsConfirmInfoBarDelegate();
618 ASSERT_TRUE(infobar_delegate_1); 921 ASSERT_TRUE(infobar_delegate_1);
619 infobar_delegate_1->Accept(); 922 infobar_delegate_1->Accept();
620 CheckPermissionMessageSentForTab(0, 1, true); 923 CheckPermissionMessageSentForTab(0, 1, true);
621 infobar_service_for_tab(0)->RemoveInfoBar(infobar_1); 924 infobar_service_for_tab(0)->RemoveInfoBar(infobar_1);
622 EXPECT_EQ(1U, closed_infobar_tracker_.size()); 925 EXPECT_EQ(1U, closed_infobar_tracker_.size());
623 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_1)); 926 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_1));
624 } 927 }
625 928
626 TEST_F(GeolocationPermissionContextTests, TabDestroyed) { 929 TEST_F(GeolocationPermissionContextTests, TabDestroyedInfobar) {
930 if (PermissionBubbleManager::Enabled())
931 return;
932
627 GURL requesting_frame_0("http://www.example.com/geolocation"); 933 GURL requesting_frame_0("http://www.example.com/geolocation");
628 GURL requesting_frame_1("http://www.example-2.com/geolocation"); 934 GURL requesting_frame_1("http://www.example-2.com/geolocation");
629 EXPECT_EQ(CONTENT_SETTING_ASK, 935 EXPECT_EQ(CONTENT_SETTING_ASK,
630 profile()->GetHostContentSettingsMap()->GetContentSetting( 936 profile()->GetHostContentSettingsMap()->GetContentSetting(
631 requesting_frame_0, requesting_frame_0, 937 requesting_frame_0, requesting_frame_0,
632 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string())); 938 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
633 939
634 EXPECT_EQ(CONTENT_SETTING_ASK, 940 EXPECT_EQ(CONTENT_SETTING_ASK,
635 profile()->GetHostContentSettingsMap()->GetContentSetting( 941 profile()->GetHostContentSettingsMap()->GetContentSetting(
636 requesting_frame_1, requesting_frame_0, 942 requesting_frame_1, requesting_frame_0,
637 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string())); 943 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
638 944
639 NavigateAndCommit(requesting_frame_0); 945 NavigateAndCommit(requesting_frame_0);
640 EXPECT_EQ(0U, infobar_service()->infobar_count()); 946 EXPECT_EQ(0U, infobar_service()->infobar_count());
641 // Request permission for two frames. 947 // Request permission for two frames.
642 RequestGeolocationPermission( 948 RequestGeolocationPermission(
643 web_contents(), RequestID(0), requesting_frame_0); 949 web_contents(), RequestID(0), requesting_frame_0, true);
644 RequestGeolocationPermission( 950 RequestGeolocationPermission(
645 web_contents(), RequestID(1), requesting_frame_1); 951 web_contents(), RequestID(1), requesting_frame_1, true);
646 // Ensure only one infobar is created. 952 // Ensure only one infobar is created.
647 ASSERT_EQ(1U, infobar_service()->infobar_count()); 953 ASSERT_EQ(1U, infobar_service()->infobar_count());
648 infobars::InfoBar* infobar = infobar_service()->infobar_at(0); 954 infobars::InfoBar* infobar = infobar_service()->infobar_at(0);
649 955
650 // Delete the tab contents. 956 // Delete the tab contents.
651 DeleteContents(); 957 DeleteContents();
652 958
653 // During contents destruction, the infobar will have been closed, and the 959 // During contents destruction, the infobar will have been closed, and the
654 // pending request should have been cleared without an infobar being created. 960 // pending request should have been cleared without an infobar being created.
655 ASSERT_EQ(1U, closed_infobar_tracker_.size()); 961 ASSERT_EQ(1U, closed_infobar_tracker_.size());
656 ASSERT_TRUE(closed_infobar_tracker_.Contains(infobar)); 962 ASSERT_TRUE(closed_infobar_tracker_.Contains(infobar));
657 } 963 }
658 964
965 TEST_F(GeolocationPermissionContextTests, TabDestroyedBubbles) {
966 if (!PermissionBubbleManager::Enabled())
967 return;
968
969 GURL requesting_frame_0("http://www.example.com/geolocation");
970 GURL requesting_frame_1("http://www.example-2.com/geolocation");
971 EXPECT_EQ(CONTENT_SETTING_ASK,
972 profile()->GetHostContentSettingsMap()->GetContentSetting(
973 requesting_frame_0, requesting_frame_0,
974 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
975
976 EXPECT_EQ(CONTENT_SETTING_ASK,
977 profile()->GetHostContentSettingsMap()->GetContentSetting(
978 requesting_frame_1, requesting_frame_0,
979 CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
980
981 NavigateAndCommit(requesting_frame_0);
982 BubbleManagerDocumentLoadCompleted();
983 PermissionBubbleManager* mgr =
984 PermissionBubbleManager::FromWebContents(web_contents());
985 ASSERT_TRUE(mgr != NULL);
986 ASSERT_EQ(0, GetBubblesQueueSize(mgr));
987
988 // Request permission for two frames.
989 RequestGeolocationPermission(
990 web_contents(), RequestID(0), requesting_frame_0, true);
991 RequestGeolocationPermission(
992 web_contents(), RequestID(1), requesting_frame_1, true);
993 // Ensure only one bubble request is shown.
994 ASSERT_EQ(1, GetBubblesQueueSize(mgr));
995
996 // Delete the tab contents.
997 DeleteContents();
998
999 // During contents destruction, the bubble will have been closed, and the
1000 // pending request should have been cleared without a bubble being shown.
1001 }
1002
659 TEST_F(GeolocationPermissionContextTests, InfoBarUsesCommittedEntry) { 1003 TEST_F(GeolocationPermissionContextTests, InfoBarUsesCommittedEntry) {
1004 if (PermissionBubbleManager::Enabled())
1005 return;
1006
660 GURL requesting_frame_0("http://www.example.com/geolocation"); 1007 GURL requesting_frame_0("http://www.example.com/geolocation");
661 GURL requesting_frame_1("http://www.example-2.com/geolocation"); 1008 GURL requesting_frame_1("http://www.example-2.com/geolocation");
662 NavigateAndCommit(requesting_frame_0); 1009 NavigateAndCommit(requesting_frame_0);
663 NavigateAndCommit(requesting_frame_1); 1010 NavigateAndCommit(requesting_frame_1);
664 EXPECT_EQ(0U, infobar_service()->infobar_count()); 1011 EXPECT_EQ(0U, infobar_service()->infobar_count());
665 // Go back: navigate to a pending entry before requesting geolocation 1012 // Go back: navigate to a pending entry before requesting geolocation
666 // permission. 1013 // permission.
667 web_contents()->GetController().GoBack(); 1014 web_contents()->GetController().GoBack();
668 // Request permission for the committed frame (not the pending one). 1015 // Request permission for the committed frame (not the pending one).
669 RequestGeolocationPermission( 1016 RequestGeolocationPermission(
670 web_contents(), RequestID(0), requesting_frame_1); 1017 web_contents(), RequestID(0), requesting_frame_1, true);
671 // Ensure the infobar is created. 1018 // Ensure the infobar is created.
672 ASSERT_EQ(1U, infobar_service()->infobar_count()); 1019 ASSERT_EQ(1U, infobar_service()->infobar_count());
673 infobars::InfoBarDelegate* infobar_delegate = 1020 infobars::InfoBarDelegate* infobar_delegate =
674 infobar_service()->infobar_at(0)->delegate(); 1021 infobar_service()->infobar_at(0)->delegate();
675 ASSERT_TRUE(infobar_delegate); 1022 ASSERT_TRUE(infobar_delegate);
676 // Ensure the infobar wouldn't expire for a navigation to the committed entry. 1023 // Ensure the infobar wouldn't expire for a navigation to the committed entry.
677 content::LoadCommittedDetails details; 1024 content::LoadCommittedDetails details;
678 details.entry = web_contents()->GetController().GetLastCommittedEntry(); 1025 details.entry = web_contents()->GetController().GetLastCommittedEntry();
679 EXPECT_FALSE(infobar_delegate->ShouldExpire( 1026 EXPECT_FALSE(infobar_delegate->ShouldExpire(
680 InfoBarService::NavigationDetailsFromLoadCommittedDetails(details))); 1027 InfoBarService::NavigationDetailsFromLoadCommittedDetails(details)));
(...skipping 17 matching lines...) Expand all
698 HostContentSettingsMap* map = profile()->GetHostContentSettingsMap(); 1045 HostContentSettingsMap* map = profile()->GetHostContentSettingsMap();
699 map->SetPrefClockForTesting(scoped_ptr<base::Clock>(test_clock)); 1046 map->SetPrefClockForTesting(scoped_ptr<base::Clock>(test_clock));
700 1047
701 // The permission shouldn't have been used yet. 1048 // The permission shouldn't have been used yet.
702 EXPECT_EQ(map->GetLastUsage(requesting_frame.GetOrigin(), 1049 EXPECT_EQ(map->GetLastUsage(requesting_frame.GetOrigin(),
703 requesting_frame.GetOrigin(), 1050 requesting_frame.GetOrigin(),
704 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), 1051 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
705 0); 1052 0);
706 1053
707 EXPECT_EQ(0U, infobar_service()->infobar_count()); 1054 EXPECT_EQ(0U, infobar_service()->infobar_count());
708 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); 1055 RequestGeolocationPermission(
709 ASSERT_EQ(1U, infobar_service()->infobar_count()); 1056 web_contents(), RequestID(0), requesting_frame, true);
710 infobars::InfoBar* infobar = infobar_service()->infobar_at(0); 1057
711 ConfirmInfoBarDelegate* infobar_delegate = 1058 if (!PermissionBubbleManager::Enabled()) {
712 infobar->delegate()->AsConfirmInfoBarDelegate(); 1059 ASSERT_EQ(1U, infobar_service()->infobar_count());
713 ASSERT_TRUE(infobar_delegate); 1060 infobars::InfoBar* infobar = infobar_service()->infobar_at(0);
714 infobar_delegate->Accept(); 1061 ConfirmInfoBarDelegate* infobar_delegate =
1062 infobar->delegate()->AsConfirmInfoBarDelegate();
1063 ASSERT_TRUE(infobar_delegate);
1064 infobar_delegate->Accept();
1065 } else {
1066 PermissionBubbleManager* mgr =
1067 PermissionBubbleManager::FromWebContents(web_contents());
1068 AcceptBubble(mgr);
1069 }
1070
715 CheckTabContentsState(requesting_frame, CONTENT_SETTING_ALLOW); 1071 CheckTabContentsState(requesting_frame, CONTENT_SETTING_ALLOW);
716 CheckPermissionMessageSent(0, true); 1072 CheckPermissionMessageSent(0, true);
717 1073
718 // Permission has been used at the starting time. 1074 // Permission has been used at the starting time.
719 EXPECT_EQ(map->GetLastUsage(requesting_frame.GetOrigin(), 1075 EXPECT_EQ(map->GetLastUsage(requesting_frame.GetOrigin(),
720 requesting_frame.GetOrigin(), 1076 requesting_frame.GetOrigin(),
721 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), 1077 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
722 10); 1078 10);
723 1079
724 test_clock->Advance(base::TimeDelta::FromSeconds(3)); 1080 test_clock->Advance(base::TimeDelta::FromSeconds(3));
725 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); 1081 RequestGeolocationPermission(
1082 web_contents(), RequestID(0), requesting_frame, true);
726 1083
727 // Permission has been used three seconds later. 1084 // Permission has been used three seconds later.
728 EXPECT_EQ(map->GetLastUsage(requesting_frame.GetOrigin(), 1085 EXPECT_EQ(map->GetLastUsage(requesting_frame.GetOrigin(),
729 requesting_frame.GetOrigin(), 1086 requesting_frame.GetOrigin(),
730 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), 1087 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
731 13); 1088 13);
732 } 1089 }
733 1090
734 TEST_F(GeolocationPermissionContextTests, LastUsageAuditedMultipleFrames) { 1091 TEST_F(GeolocationPermissionContextTests,
1092 LastUsageAuditedMultipleFramesInfobar) {
1093 if (PermissionBubbleManager::Enabled())
1094 return;
1095
735 base::SimpleTestClock* test_clock = new base::SimpleTestClock; 1096 base::SimpleTestClock* test_clock = new base::SimpleTestClock;
736 test_clock->SetNow(base::Time::UnixEpoch() + 1097 test_clock->SetNow(base::Time::UnixEpoch() +
737 base::TimeDelta::FromSeconds(10)); 1098 base::TimeDelta::FromSeconds(10));
738 1099
739 HostContentSettingsMap* map = profile()->GetHostContentSettingsMap(); 1100 HostContentSettingsMap* map = profile()->GetHostContentSettingsMap();
740 map->SetPrefClockForTesting(scoped_ptr<base::Clock>(test_clock)); 1101 map->SetPrefClockForTesting(scoped_ptr<base::Clock>(test_clock));
741 1102
742 GURL requesting_frame_0("http://www.example.com/geolocation"); 1103 GURL requesting_frame_0("http://www.example.com/geolocation");
743 GURL requesting_frame_1("http://www.example-2.com/geolocation"); 1104 GURL requesting_frame_1("http://www.example-2.com/geolocation");
744 1105
745 // The permission shouldn't have been used yet. 1106 // The permission shouldn't have been used yet.
746 EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(), 1107 EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(),
747 requesting_frame_0.GetOrigin(), 1108 requesting_frame_0.GetOrigin(),
748 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), 1109 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
749 0); 1110 0);
750 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(), 1111 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(),
751 requesting_frame_0.GetOrigin(), 1112 requesting_frame_0.GetOrigin(),
752 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), 1113 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
753 0); 1114 0);
754 1115
755 NavigateAndCommit(requesting_frame_0); 1116 NavigateAndCommit(requesting_frame_0);
756 EXPECT_EQ(0U, infobar_service()->infobar_count()); 1117 EXPECT_EQ(0U, infobar_service()->infobar_count());
757 1118
758 // Request permission for two frames. 1119 // Request permission for two frames.
759 RequestGeolocationPermission( 1120 RequestGeolocationPermission(
760 web_contents(), RequestID(0), requesting_frame_0); 1121 web_contents(), RequestID(0), requesting_frame_0, true);
761 RequestGeolocationPermission( 1122 RequestGeolocationPermission(
762 web_contents(), RequestID(1), requesting_frame_1); 1123 web_contents(), RequestID(1), requesting_frame_1, true);
763 1124
764 // Ensure only one infobar is created. 1125 // Ensure only one infobar is created.
765 ASSERT_EQ(1U, infobar_service()->infobar_count()); 1126 ASSERT_EQ(1U, infobar_service()->infobar_count());
766 infobars::InfoBar* infobar_0 = infobar_service()->infobar_at(0); 1127 infobars::InfoBar* infobar_0 = infobar_service()->infobar_at(0);
767 ConfirmInfoBarDelegate* infobar_delegate_0 = 1128 ConfirmInfoBarDelegate* infobar_delegate_0 =
768 infobar_0->delegate()->AsConfirmInfoBarDelegate(); 1129 infobar_0->delegate()->AsConfirmInfoBarDelegate();
769 1130
770 // Accept the first frame. 1131 // Accept the first frame.
771 infobar_delegate_0->Accept(); 1132 infobar_delegate_0->Accept();
1133
772 CheckTabContentsState(requesting_frame_0, CONTENT_SETTING_ALLOW); 1134 CheckTabContentsState(requesting_frame_0, CONTENT_SETTING_ALLOW);
773 CheckPermissionMessageSent(0, true); 1135 CheckPermissionMessageSent(0, true);
774 infobar_service()->RemoveInfoBar(infobar_0); 1136 infobar_service()->RemoveInfoBar(infobar_0);
775 1137
776 // Verify that accepting the first didn't accept because it's embedder 1138 // Verify that accepting the first didn't accept because it's embedder
777 // in the other. 1139 // in the other.
778 EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(), 1140 EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(),
779 requesting_frame_0.GetOrigin(), 1141 requesting_frame_0.GetOrigin(),
780 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), 1142 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
781 10); 1143 10);
(...skipping 20 matching lines...) Expand all
802 requesting_frame_0.GetOrigin(), 1164 requesting_frame_0.GetOrigin(),
803 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), 1165 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
804 10); 1166 10);
805 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(), 1167 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(),
806 requesting_frame_0.GetOrigin(), 1168 requesting_frame_0.GetOrigin(),
807 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), 1169 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
808 11); 1170 11);
809 1171
810 test_clock->Advance(base::TimeDelta::FromSeconds(2)); 1172 test_clock->Advance(base::TimeDelta::FromSeconds(2));
811 RequestGeolocationPermission( 1173 RequestGeolocationPermission(
812 web_contents(), RequestID(0), requesting_frame_0); 1174 web_contents(), RequestID(0), requesting_frame_0, true);
813 1175
814 // Verify that requesting permission in one frame doesn't update other where 1176 // Verify that requesting permission in one frame doesn't update other where
815 // it is the embedder. 1177 // it is the embedder.
1178 EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(),
1179 requesting_frame_0.GetOrigin(),
1180 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
1181 13);
1182 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(),
1183 requesting_frame_0.GetOrigin(),
1184 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
1185 11);
1186 }
1187
1188 TEST_F(GeolocationPermissionContextTests,
1189 LastUsageAuditedMultipleFramesBubble) {
1190 if (!PermissionBubbleManager::Enabled())
1191 return;
1192
1193 base::SimpleTestClock* test_clock = new base::SimpleTestClock;
1194 test_clock->SetNow(base::Time::UnixEpoch() +
1195 base::TimeDelta::FromSeconds(10));
1196
1197 HostContentSettingsMap* map = profile()->GetHostContentSettingsMap();
1198 map->SetPrefClockForTesting(scoped_ptr<base::Clock>(test_clock));
1199
1200 GURL requesting_frame_0("http://www.example.com/geolocation");
1201 GURL requesting_frame_1("http://www.example-2.com/geolocation");
1202
1203 // The permission shouldn't have been used yet.
1204 EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(),
1205 requesting_frame_0.GetOrigin(),
1206 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
1207 0);
1208 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(),
1209 requesting_frame_0.GetOrigin(),
1210 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
1211 0);
1212
1213 NavigateAndCommit(requesting_frame_0);
1214 BubbleManagerDocumentLoadCompleted();
1215 PermissionBubbleManager* mgr =
1216 PermissionBubbleManager::FromWebContents(web_contents());
1217 EXPECT_EQ(0, GetBubblesQueueSize(mgr));
1218
1219 // Request permission for two frames.
1220 RequestGeolocationPermission(
1221 web_contents(), RequestID(0), requesting_frame_0, true);
1222 RequestGeolocationPermission(
1223 web_contents(), RequestID(1), requesting_frame_1, true);
1224 EXPECT_EQ(1, GetBubblesQueueSize(mgr)); // 1 in request queue, 1 in pending
1225 content::RunAllPendingInMessageLoop();
1226
1227 // Accept the first frame.
1228 AcceptBubble(mgr);
1229
1230 LOG(INFO) << "Checking state after accepting requesting_frame_0";
1231 CheckTabContentsState(requesting_frame_0, CONTENT_SETTING_ALLOW);
1232 CheckPermissionMessageSent(0, true);
1233
1234 // Verify that accepting the first didn't accept because it's embedder
1235 // in the other.
1236 EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(),
1237 requesting_frame_0.GetOrigin(),
1238 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
1239 10);
1240 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(),
1241 requesting_frame_0.GetOrigin(),
1242 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
1243 0);
1244
1245 test_clock->Advance(base::TimeDelta::FromSeconds(1));
1246 AcceptBubble(mgr);
1247 LOG(INFO) << "Checking state after accepting second bubble.";
1248 CheckTabContentsState(requesting_frame_1, CONTENT_SETTING_ALLOW);
1249 CheckPermissionMessageSent(1, true);
1250
1251 // Verify that the times are different.
1252 EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(),
1253 requesting_frame_0.GetOrigin(),
1254 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
1255 10);
1256 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(),
1257 requesting_frame_0.GetOrigin(),
1258 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
1259 11);
1260
1261 test_clock->Advance(base::TimeDelta::FromSeconds(2));
1262 RequestGeolocationPermission(
1263 web_contents(), RequestID(0), requesting_frame_0, true);
1264
1265 // Verify that requesting permission in one frame doesn't update other where
1266 // it is the embedder.
816 EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(), 1267 EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(),
817 requesting_frame_0.GetOrigin(), 1268 requesting_frame_0.GetOrigin(),
818 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), 1269 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
819 13); 1270 13);
820 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(), 1271 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(),
821 requesting_frame_0.GetOrigin(), 1272 requesting_frame_0.GetOrigin(),
822 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), 1273 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
823 11); 1274 11);
824 } 1275 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698