| 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 "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/command_line.h" | 12 #include "base/command_line.h" |
| 13 #include "base/containers/hash_tables.h" | 13 #include "base/containers/hash_tables.h" |
| 14 #include "base/gtest_prod_util.h" | 14 #include "base/gtest_prod_util.h" |
| 15 #include "base/id_map.h" | 15 #include "base/id_map.h" |
| 16 #include "base/memory/scoped_vector.h" | 16 #include "base/memory/scoped_vector.h" |
| 17 #include "base/synchronization/waitable_event.h" | 17 #include "base/synchronization/waitable_event.h" |
| 18 #include "base/test/simple_test_clock.h" | 18 #include "base/test/simple_test_clock.h" |
| 19 #include "base/time/clock.h" | 19 #include "base/time/clock.h" |
| 20 #include "chrome/browser/chrome_notification_types.h" | 20 #include "chrome/browser/chrome_notification_types.h" |
| 21 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" | 21 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
| 22 #include "chrome/browser/content_settings/tab_specific_content_settings.h" | 22 #include "chrome/browser/content_settings/tab_specific_content_settings.h" |
| 23 #include "chrome/browser/geolocation/geolocation_permission_context_factory.h" | 23 #include "chrome/browser/geolocation/geolocation_permission_context_factory.h" |
| 24 #include "chrome/browser/infobars/infobar_service.h" | 24 #include "chrome/browser/infobars/infobar_service.h" |
| 25 #include "chrome/browser/permissions/permission_infobar_manager.h" |
| 25 #include "chrome/browser/permissions/permission_request_id.h" | 26 #include "chrome/browser/permissions/permission_request_id.h" |
| 26 #include "chrome/browser/ui/website_settings/mock_permission_bubble_view.h" | 27 #include "chrome/browser/ui/website_settings/mock_permission_bubble_view.h" |
| 27 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h" | 28 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h" |
| 28 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" | 29 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" |
| 29 #include "chrome/common/chrome_switches.h" | 30 #include "chrome/common/chrome_switches.h" |
| 30 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 31 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| 31 #include "chrome/test/base/testing_profile.h" | 32 #include "chrome/test/base/testing_profile.h" |
| 32 #include "components/content_settings/core/browser/host_content_settings_map.h" | 33 #include "components/content_settings/core/browser/host_content_settings_map.h" |
| 33 #include "components/infobars/core/confirm_infobar_delegate.h" | 34 #include "components/infobars/core/confirm_infobar_delegate.h" |
| 34 #include "components/infobars/core/infobar.h" | 35 #include "components/infobars/core/infobar.h" |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 void TearDown() override; | 120 void TearDown() override; |
| 120 | 121 |
| 121 PermissionRequestID RequestID(int request_id); | 122 PermissionRequestID RequestID(int request_id); |
| 122 PermissionRequestID RequestIDForTab(int tab, int request_id); | 123 PermissionRequestID RequestIDForTab(int tab, int request_id); |
| 123 InfoBarService* infobar_service() { | 124 InfoBarService* infobar_service() { |
| 124 return InfoBarService::FromWebContents(web_contents()); | 125 return InfoBarService::FromWebContents(web_contents()); |
| 125 } | 126 } |
| 126 InfoBarService* infobar_service_for_tab(int tab) { | 127 InfoBarService* infobar_service_for_tab(int tab) { |
| 127 return InfoBarService::FromWebContents(extra_tabs_[tab]); | 128 return InfoBarService::FromWebContents(extra_tabs_[tab]); |
| 128 } | 129 } |
| 130 PermissionInfoBarManager* infobar_manager() { |
| 131 return PermissionInfoBarManager::FromWebContents(web_contents()); |
| 132 } |
| 133 PermissionInfoBarManager* infobar_manager_for_tab(int tab) { |
| 134 return PermissionInfoBarManager::FromWebContents(extra_tabs_[tab]); |
| 135 } |
| 129 | 136 |
| 130 void RequestGeolocationPermission(content::WebContents* web_contents, | 137 void RequestGeolocationPermission(content::WebContents* web_contents, |
| 131 const PermissionRequestID& id, | 138 const PermissionRequestID& id, |
| 132 const GURL& requesting_frame, | 139 const GURL& requesting_frame, |
| 133 bool user_gesture); | 140 bool user_gesture); |
| 134 | 141 |
| 135 void PermissionResponse(const PermissionRequestID& id, | 142 void PermissionResponse(const PermissionRequestID& id, |
| 136 ContentSetting content_setting); | 143 ContentSetting content_setting); |
| 137 void CheckPermissionMessageSent(int request_id, bool allowed); | 144 void CheckPermissionMessageSent(int request_id, bool allowed); |
| 138 void CheckPermissionMessageSentForTab(int tab, int request_id, bool allowed); | 145 void CheckPermissionMessageSentForTab(int tab, int request_id, bool allowed); |
| 139 void CheckPermissionMessageSentInternal(MockRenderProcessHost* process, | 146 void CheckPermissionMessageSentInternal(MockRenderProcessHost* process, |
| 140 int request_id, | 147 int request_id, |
| 141 bool allowed); | 148 bool allowed); |
| 142 void AddNewTab(const GURL& url); | 149 void AddNewTab(const GURL& url); |
| 143 void CheckTabContentsState(const GURL& requesting_frame, | 150 void CheckTabContentsState(const GURL& requesting_frame, |
| 144 ContentSetting expected_content_setting); | 151 ContentSetting expected_content_setting); |
| 145 size_t GetBubblesQueueSize(PermissionBubbleManager* manager); | 152 size_t GetBubblesQueueSize(PermissionBubbleManager* manager); |
| 146 void AcceptBubble(PermissionBubbleManager* manager); | 153 void AcceptBubble(PermissionBubbleManager* manager); |
| 147 void DenyBubble(PermissionBubbleManager* manager); | 154 void DenyBubble(PermissionBubbleManager* manager); |
| 148 void CloseBubble(PermissionBubbleManager* manager); | 155 void CloseBubble(PermissionBubbleManager* manager); |
| 149 void BubbleManagerDocumentLoadCompleted(); | 156 void BubbleManagerDocumentLoadCompleted(); |
| 150 void BubbleManagerDocumentLoadCompleted(content::WebContents* web_contents); | 157 void BubbleManagerDocumentLoadCompleted(content::WebContents* web_contents); |
| 151 ContentSetting GetGeolocationContentSetting(GURL frame_0, GURL frame_1); | 158 ContentSetting GetGeolocationContentSetting(GURL frame_0, GURL frame_1); |
| 152 bool BubbleEnabled() const; | 159 bool BubbleEnabled() const; |
| 153 size_t GetNumberOfPrompts(); | 160 size_t GetNumberOfPrompts(); |
| 154 void AcceptPrompt(); | 161 void AcceptPrompt(); |
| 155 base::string16 GetPromptText(); | 162 base::string16 GetPromptText(); |
| 156 | 163 |
| 164 bool IsInfoBarShowPending(PermissionInfoBarManager* manager) const; |
| 165 void ShowNextQueuedInfoBar(PermissionInfoBarManager* manager); |
| 166 |
| 157 // owned by the browser context | 167 // owned by the browser context |
| 158 GeolocationPermissionContext* geolocation_permission_context_; | 168 GeolocationPermissionContext* geolocation_permission_context_; |
| 159 ClosedInfoBarTracker closed_infobar_tracker_; | 169 ClosedInfoBarTracker closed_infobar_tracker_; |
| 160 ScopedVector<content::WebContents> extra_tabs_; | 170 ScopedVector<content::WebContents> extra_tabs_; |
| 161 | 171 |
| 162 // A map between renderer child id and a pair represending the bridge id and | 172 // A map between renderer child id and a pair represending the bridge id and |
| 163 // whether the requested permission was allowed. | 173 // whether the requested permission was allowed. |
| 164 base::hash_map<int, std::pair<int, bool> > responses_; | 174 base::hash_map<int, std::pair<int, bool> > responses_; |
| 165 }; | 175 }; |
| 166 | 176 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 url, content::Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); | 241 url, content::Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); |
| 232 content::NavigationEntry* entry = new_tab->GetController().GetPendingEntry(); | 242 content::NavigationEntry* entry = new_tab->GetController().GetPendingEntry(); |
| 233 content::RenderFrameHostTester::For(new_tab->GetMainFrame()) | 243 content::RenderFrameHostTester::For(new_tab->GetMainFrame()) |
| 234 ->SendNavigate(extra_tabs_.size() + 1, entry->GetUniqueID(), true, url); | 244 ->SendNavigate(extra_tabs_.size() + 1, entry->GetUniqueID(), true, url); |
| 235 | 245 |
| 236 // Set up required helpers, and make this be as "tabby" as the code requires. | 246 // Set up required helpers, and make this be as "tabby" as the code requires. |
| 237 #if defined(ENABLE_EXTENSIONS) | 247 #if defined(ENABLE_EXTENSIONS) |
| 238 extensions::SetViewType(new_tab, extensions::VIEW_TYPE_TAB_CONTENTS); | 248 extensions::SetViewType(new_tab, extensions::VIEW_TYPE_TAB_CONTENTS); |
| 239 #endif | 249 #endif |
| 240 InfoBarService::CreateForWebContents(new_tab); | 250 InfoBarService::CreateForWebContents(new_tab); |
| 251 PermissionInfoBarManager::CreateForWebContents(new_tab); |
| 241 if (BubbleEnabled()) { | 252 if (BubbleEnabled()) { |
| 242 PermissionBubbleManager::CreateForWebContents(new_tab); | 253 PermissionBubbleManager::CreateForWebContents(new_tab); |
| 243 PermissionBubbleManager* permission_bubble_manager = | 254 PermissionBubbleManager* permission_bubble_manager = |
| 244 PermissionBubbleManager::FromWebContents(new_tab); | 255 PermissionBubbleManager::FromWebContents(new_tab); |
| 245 MockPermissionBubbleView::SetFactory(permission_bubble_manager, false); | 256 MockPermissionBubbleView::SetFactory(permission_bubble_manager, false); |
| 246 permission_bubble_manager->DisplayPendingRequests(); | 257 permission_bubble_manager->DisplayPendingRequests(); |
| 247 } | 258 } |
| 248 | 259 |
| 249 extra_tabs_.push_back(new_tab); | 260 extra_tabs_.push_back(new_tab); |
| 250 } | 261 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 266 } | 277 } |
| 267 | 278 |
| 268 void GeolocationPermissionContextTests::SetUp() { | 279 void GeolocationPermissionContextTests::SetUp() { |
| 269 ChromeRenderViewHostTestHarness::SetUp(); | 280 ChromeRenderViewHostTestHarness::SetUp(); |
| 270 | 281 |
| 271 // Set up required helpers, and make this be as "tabby" as the code requires. | 282 // Set up required helpers, and make this be as "tabby" as the code requires. |
| 272 #if defined(ENABLE_EXTENSIONS) | 283 #if defined(ENABLE_EXTENSIONS) |
| 273 extensions::SetViewType(web_contents(), extensions::VIEW_TYPE_TAB_CONTENTS); | 284 extensions::SetViewType(web_contents(), extensions::VIEW_TYPE_TAB_CONTENTS); |
| 274 #endif | 285 #endif |
| 275 InfoBarService::CreateForWebContents(web_contents()); | 286 InfoBarService::CreateForWebContents(web_contents()); |
| 287 PermissionInfoBarManager::CreateForWebContents(web_contents()); |
| 276 TabSpecificContentSettings::CreateForWebContents(web_contents()); | 288 TabSpecificContentSettings::CreateForWebContents(web_contents()); |
| 277 geolocation_permission_context_ = | 289 geolocation_permission_context_ = |
| 278 GeolocationPermissionContextFactory::GetForProfile(profile()); | 290 GeolocationPermissionContextFactory::GetForProfile(profile()); |
| 279 #if defined(OS_ANDROID) | 291 #if defined(OS_ANDROID) |
| 280 static_cast<GeolocationPermissionContextAndroid*>( | 292 static_cast<GeolocationPermissionContextAndroid*>( |
| 281 geolocation_permission_context_) | 293 geolocation_permission_context_) |
| 282 ->SetLocationSettingsForTesting( | 294 ->SetLocationSettingsForTesting( |
| 283 scoped_ptr<LocationSettings>(new MockLocationSettings())); | 295 scoped_ptr<LocationSettings>(new MockLocationSettings())); |
| 284 MockLocationSettings::SetLocationStatus(true, true); | 296 MockLocationSettings::SetLocationStatus(true, true); |
| 285 #endif | 297 #endif |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 369 PermissionBubbleManager* manager = | 381 PermissionBubbleManager* manager = |
| 370 PermissionBubbleManager::FromWebContents(web_contents()); | 382 PermissionBubbleManager::FromWebContents(web_contents()); |
| 371 return manager->requests_.front()->GetMessageText(); | 383 return manager->requests_.front()->GetMessageText(); |
| 372 } | 384 } |
| 373 infobars::InfoBar* infobar = infobar_service()->infobar_at(0); | 385 infobars::InfoBar* infobar = infobar_service()->infobar_at(0); |
| 374 ConfirmInfoBarDelegate* infobar_delegate = | 386 ConfirmInfoBarDelegate* infobar_delegate = |
| 375 infobar->delegate()->AsConfirmInfoBarDelegate(); | 387 infobar->delegate()->AsConfirmInfoBarDelegate(); |
| 376 return infobar_delegate->GetMessageText(); | 388 return infobar_delegate->GetMessageText(); |
| 377 } | 389 } |
| 378 | 390 |
| 391 bool GeolocationPermissionContextTests::IsInfoBarShowPending( |
| 392 PermissionInfoBarManager* manager) const { |
| 393 return manager->is_show_pending_; |
| 394 } |
| 395 |
| 396 void GeolocationPermissionContextTests::ShowNextQueuedInfoBar( |
| 397 PermissionInfoBarManager* manager) { |
| 398 manager->ShowNextQueuedRequest(); |
| 399 } |
| 400 |
| 379 // Tests ---------------------------------------------------------------------- | 401 // Tests ---------------------------------------------------------------------- |
| 380 | 402 |
| 381 TEST_F(GeolocationPermissionContextTests, SinglePermissionInfobar) { | 403 TEST_F(GeolocationPermissionContextTests, SinglePermissionInfobar) { |
| 382 if (BubbleEnabled()) return; | 404 if (BubbleEnabled()) return; |
| 383 | 405 |
| 384 GURL requesting_frame("http://www.example.com/geolocation"); | 406 GURL requesting_frame("http://www.example.com/geolocation"); |
| 385 NavigateAndCommit(requesting_frame); | 407 NavigateAndCommit(requesting_frame); |
| 386 EXPECT_EQ(0U, infobar_service()->infobar_count()); | 408 EXPECT_EQ(0U, infobar_service()->infobar_count()); |
| 387 RequestGeolocationPermission( | 409 RequestGeolocationPermission( |
| 388 web_contents(), RequestID(0), requesting_frame, true); | 410 web_contents(), RequestID(0), requesting_frame, true); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 490 AcceptPrompt(); | 512 AcceptPrompt(); |
| 491 CheckTabContentsState(requesting_frame_0, CONTENT_SETTING_ALLOW); | 513 CheckTabContentsState(requesting_frame_0, CONTENT_SETTING_ALLOW); |
| 492 CheckPermissionMessageSent(0, true); | 514 CheckPermissionMessageSent(0, true); |
| 493 | 515 |
| 494 if (!BubbleEnabled()) { | 516 if (!BubbleEnabled()) { |
| 495 infobars::InfoBar* infobar_0 = infobar_service()->infobar_at(0); | 517 infobars::InfoBar* infobar_0 = infobar_service()->infobar_at(0); |
| 496 infobar_service()->RemoveInfoBar(infobar_0); | 518 infobar_service()->RemoveInfoBar(infobar_0); |
| 497 EXPECT_EQ(1U, closed_infobar_tracker_.size()); | 519 EXPECT_EQ(1U, closed_infobar_tracker_.size()); |
| 498 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_0)); | 520 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_0)); |
| 499 closed_infobar_tracker_.Clear(); | 521 closed_infobar_tracker_.Clear(); |
| 522 |
| 523 // Make the next request appear after having checked that it was posted |
| 524 // to the event loop. |
| 525 ASSERT_TRUE(IsInfoBarShowPending(infobar_manager())); |
| 526 ShowNextQueuedInfoBar(infobar_manager()); |
| 500 } | 527 } |
| 501 | 528 |
| 502 // Now we should have a new infobar for the second frame. | 529 // Now we should have a new infobar for the second frame. |
| 503 ASSERT_EQ(1U, GetNumberOfPrompts()); | 530 ASSERT_EQ(1U, GetNumberOfPrompts()); |
| 504 base::string16 text_1 = GetPromptText(); | 531 base::string16 text_1 = GetPromptText(); |
| 505 | 532 |
| 506 // Check that the messages differ. | 533 // Check that the messages differ. |
| 507 EXPECT_NE(text_0, text_1); | 534 EXPECT_NE(text_0, text_1); |
| 508 | 535 |
| 509 // Cancel (block) this frame. | 536 // Cancel (block) this frame. |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 553 | 580 |
| 554 // Cleanup. | 581 // Cleanup. |
| 555 if (!BubbleEnabled()) { | 582 if (!BubbleEnabled()) { |
| 556 infobars::InfoBar* infobar = infobar_service()->infobar_at(0); | 583 infobars::InfoBar* infobar = infobar_service()->infobar_at(0); |
| 557 infobar_service()->RemoveInfoBar(infobar); | 584 infobar_service()->RemoveInfoBar(infobar); |
| 558 EXPECT_EQ(1U, closed_infobar_tracker_.size()); | 585 EXPECT_EQ(1U, closed_infobar_tracker_.size()); |
| 559 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar)); | 586 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar)); |
| 560 } | 587 } |
| 561 } | 588 } |
| 562 | 589 |
| 563 TEST_F(GeolocationPermissionContextTests, PermissionForFileScheme) { | 590 // TODO(felt): The bubble and (recently) the infobar are rejecting file:// |
| 564 // TODO(felt): The bubble is rejecting file:// permission requests. | 591 // permission requests. Fix and enable this test. crbug.com/444047 |
| 565 // Fix and enable this test. crbug.com/444047 | 592 TEST_F(GeolocationPermissionContextTests, DISABLED_PermissionForFileScheme) { |
| 566 if (BubbleEnabled()) return; | |
| 567 | |
| 568 GURL requesting_frame("file://example/geolocation.html"); | 593 GURL requesting_frame("file://example/geolocation.html"); |
| 569 NavigateAndCommit(requesting_frame); | 594 NavigateAndCommit(requesting_frame); |
| 570 if (BubbleEnabled()) BubbleManagerDocumentLoadCompleted(); | 595 if (BubbleEnabled()) BubbleManagerDocumentLoadCompleted(); |
| 571 | 596 |
| 572 // Check permission is requested. | 597 // Check permission is requested. |
| 573 ASSERT_EQ(0U, GetNumberOfPrompts()); | 598 ASSERT_EQ(0U, GetNumberOfPrompts()); |
| 574 RequestGeolocationPermission( | 599 RequestGeolocationPermission( |
| 575 web_contents(), RequestID(0), requesting_frame, true); | 600 web_contents(), RequestID(0), requesting_frame, true); |
| 576 EXPECT_EQ(1U, GetNumberOfPrompts()); | 601 EXPECT_EQ(1U, GetNumberOfPrompts()); |
| 577 | 602 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 611 ASSERT_FALSE(text_0.empty()); | 636 ASSERT_FALSE(text_0.empty()); |
| 612 | 637 |
| 613 // Simulate the frame going away; the request should be removed. | 638 // Simulate the frame going away; the request should be removed. |
| 614 if (BubbleEnabled()) { | 639 if (BubbleEnabled()) { |
| 615 PermissionBubbleManager* manager = | 640 PermissionBubbleManager* manager = |
| 616 PermissionBubbleManager::FromWebContents(web_contents()); | 641 PermissionBubbleManager::FromWebContents(web_contents()); |
| 617 CloseBubble(manager); | 642 CloseBubble(manager); |
| 618 } else { | 643 } else { |
| 619 geolocation_permission_context_->CancelPermissionRequest(web_contents(), | 644 geolocation_permission_context_->CancelPermissionRequest(web_contents(), |
| 620 RequestID(0)); | 645 RequestID(0)); |
| 646 |
| 647 // Make the next request appear after having checked that it was posted |
| 648 // to the event loop. |
| 649 ASSERT_TRUE(IsInfoBarShowPending(infobar_manager())); |
| 650 ShowNextQueuedInfoBar(infobar_manager()); |
| 621 } | 651 } |
| 622 | 652 |
| 623 // Check that the next pending request is created correctly. | 653 // Check that the next pending request is created correctly. |
| 624 base::string16 text_1 = GetPromptText(); | 654 base::string16 text_1 = GetPromptText(); |
| 625 EXPECT_NE(text_0, text_1); | 655 EXPECT_NE(text_0, text_1); |
| 626 | 656 |
| 627 // Allow this frame and check that it worked. | 657 // Allow this frame and check that it worked. |
| 628 AcceptPrompt(); | 658 AcceptPrompt(); |
| 629 CheckTabContentsState(frame_1, CONTENT_SETTING_ALLOW); | 659 CheckTabContentsState(frame_1, CONTENT_SETTING_ALLOW); |
| 630 CheckPermissionMessageSent(1, true); | 660 CheckPermissionMessageSent(1, true); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 688 // Accept the permission in tab A0. | 718 // Accept the permission in tab A0. |
| 689 if (BubbleEnabled()) { | 719 if (BubbleEnabled()) { |
| 690 AcceptBubble(manager_a0); | 720 AcceptBubble(manager_a0); |
| 691 } else { | 721 } else { |
| 692 infobars::InfoBar* infobar_a0 = infobar_service()->infobar_at(0); | 722 infobars::InfoBar* infobar_a0 = infobar_service()->infobar_at(0); |
| 693 ConfirmInfoBarDelegate* infobar_delegate_a0 = | 723 ConfirmInfoBarDelegate* infobar_delegate_a0 = |
| 694 infobar_a0->delegate()->AsConfirmInfoBarDelegate(); | 724 infobar_a0->delegate()->AsConfirmInfoBarDelegate(); |
| 695 ASSERT_TRUE(infobar_delegate_a0); | 725 ASSERT_TRUE(infobar_delegate_a0); |
| 696 infobar_delegate_a0->Accept(); | 726 infobar_delegate_a0->Accept(); |
| 697 infobar_service()->RemoveInfoBar(infobar_a0); | 727 infobar_service()->RemoveInfoBar(infobar_a0); |
| 698 EXPECT_EQ(2U, closed_infobar_tracker_.size()); | 728 EXPECT_EQ(1U, closed_infobar_tracker_.size()); |
| 699 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_a0)); | 729 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_a0)); |
| 700 } | 730 } |
| 701 CheckPermissionMessageSent(0, true); | 731 CheckPermissionMessageSent(0, true); |
| 702 // Because they're the same origin, this will cause tab A1's infobar to | 732 |
| 703 // disappear. It does not cause the bubble to disappear: crbug.com/443013. | 733 // Because they're the same origin, tab_a1's bubble/infobar should disappear. |
| 704 // TODO(felt): Update this test when the bubble's behavior is changed. | 734 // In the past, infobar used to disappear and bubble did not. |
| 735 // Now both have a consistent behviour (albiet broken) of not removing |
| 736 // the bubble/infobar: see crbug.com/443013. |
| 737 // TODO(felt): Update this test when this behavior is changed. |
| 705 if (BubbleEnabled()) | 738 if (BubbleEnabled()) |
| 706 ASSERT_EQ(1U, GetBubblesQueueSize(manager_a1)); | 739 ASSERT_EQ(1U, GetBubblesQueueSize(manager_a1)); |
| 707 else | 740 else |
| 708 CheckPermissionMessageSentForTab(1, 0, true); | 741 EXPECT_EQ(1U, infobar_service_for_tab(1)->infobar_count()); |
| 709 | 742 |
| 710 // Either way, tab B should still have a pending permission request. | 743 // Either way, tab B should still have a pending permission request. |
| 711 if (BubbleEnabled()) | 744 if (BubbleEnabled()) |
| 712 ASSERT_EQ(1U, GetBubblesQueueSize(manager_b)); | 745 ASSERT_EQ(1U, GetBubblesQueueSize(manager_b)); |
| 713 else | 746 else |
| 714 ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count()); | 747 ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count()); |
| 715 } | 748 } |
| 716 | 749 |
| 717 TEST_F(GeolocationPermissionContextTests, QueuedOriginMultipleTabs) { | 750 TEST_F(GeolocationPermissionContextTests, QueuedOriginMultipleTabs) { |
| 718 GURL url_a("http://www.example.com/geolocation"); | 751 GURL url_a("http://www.example.com/geolocation"); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 747 // Accept the first request in tab A1. | 780 // Accept the first request in tab A1. |
| 748 if (BubbleEnabled()) { | 781 if (BubbleEnabled()) { |
| 749 AcceptBubble(manager_a1); | 782 AcceptBubble(manager_a1); |
| 750 } else { | 783 } else { |
| 751 infobars::InfoBar* infobar_a1 = infobar_service_for_tab(0)->infobar_at(0); | 784 infobars::InfoBar* infobar_a1 = infobar_service_for_tab(0)->infobar_at(0); |
| 752 ConfirmInfoBarDelegate* infobar_delegate_a1 = | 785 ConfirmInfoBarDelegate* infobar_delegate_a1 = |
| 753 infobar_a1->delegate()->AsConfirmInfoBarDelegate(); | 786 infobar_a1->delegate()->AsConfirmInfoBarDelegate(); |
| 754 ASSERT_TRUE(infobar_delegate_a1); | 787 ASSERT_TRUE(infobar_delegate_a1); |
| 755 infobar_delegate_a1->Accept(); | 788 infobar_delegate_a1->Accept(); |
| 756 infobar_service_for_tab(0)->RemoveInfoBar(infobar_a1); | 789 infobar_service_for_tab(0)->RemoveInfoBar(infobar_a1); |
| 757 EXPECT_EQ(2U, closed_infobar_tracker_.size()); | 790 EXPECT_EQ(1U, closed_infobar_tracker_.size()); |
| 758 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_a1)); | 791 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_a1)); |
| 792 |
| 793 // Make the next request appear after having checked that it was posted |
| 794 // to the event loop. |
| 795 ASSERT_TRUE(IsInfoBarShowPending(infobar_manager_for_tab(0))); |
| 796 ShowNextQueuedInfoBar(infobar_manager_for_tab(0)); |
| 759 } | 797 } |
| 760 CheckPermissionMessageSentForTab(0, 0, true); | 798 CheckPermissionMessageSentForTab(0, 0, true); |
| 761 | 799 |
| 762 // Because they're the same origin, this will cause tab A0's infobar to | 800 // Because they're the same origin, tab_a0's bubble/infobar should disappear. |
| 763 // disappear. It does not cause the bubble to disappear: crbug.com/443013. | 801 // In the past, infobar used to disappear and bubble did not. |
| 764 // TODO(felt): Update this test when the bubble's behavior is changed. | 802 // Now both have a consistent behviour (albiet broken) of not removing |
| 765 if (BubbleEnabled()) { | 803 // the bubble/infobar: see crbug.com/443013. |
| 804 // TODO(felt): Update this test when this behavior is changed. |
| 805 if (BubbleEnabled()) |
| 766 EXPECT_EQ(1U, GetBubblesQueueSize(manager_a0)); | 806 EXPECT_EQ(1U, GetBubblesQueueSize(manager_a0)); |
| 767 } else { | 807 else |
| 768 EXPECT_EQ(0U, infobar_service()->infobar_count()); | 808 EXPECT_EQ(1U, infobar_service()->infobar_count()); |
| 769 CheckPermissionMessageSent(0, true); | |
| 770 } | |
| 771 | 809 |
| 772 // The second request should now be visible in tab A1. | 810 // The second request should now be visible in tab A1. |
| 773 if (BubbleEnabled()) | 811 if (BubbleEnabled()) |
| 774 ASSERT_EQ(1U, GetBubblesQueueSize(manager_a1)); | 812 ASSERT_EQ(1U, GetBubblesQueueSize(manager_a1)); |
| 775 else | 813 else |
| 776 ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count()); | 814 ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count()); |
| 777 | 815 |
| 778 // Accept the second request and check that it's gone. | 816 // Accept the second request and check that it's gone. |
| 779 if (BubbleEnabled()) { | 817 if (BubbleEnabled()) { |
| 780 AcceptBubble(manager_a1); | 818 AcceptBubble(manager_a1); |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 902 RequestGeolocationPermission( | 940 RequestGeolocationPermission( |
| 903 web_contents(), RequestID(0), requesting_frame_0, false); | 941 web_contents(), RequestID(0), requesting_frame_0, false); |
| 904 RequestGeolocationPermission( | 942 RequestGeolocationPermission( |
| 905 web_contents(), RequestID(1), requesting_frame_1, false); | 943 web_contents(), RequestID(1), requesting_frame_1, false); |
| 906 | 944 |
| 907 // Ensure only one infobar is created. | 945 // Ensure only one infobar is created. |
| 908 ASSERT_EQ(1U, GetNumberOfPrompts()); | 946 ASSERT_EQ(1U, GetNumberOfPrompts()); |
| 909 | 947 |
| 910 // Accept the first frame. | 948 // Accept the first frame. |
| 911 AcceptPrompt(); | 949 AcceptPrompt(); |
| 912 if (!BubbleEnabled()) | 950 if (!BubbleEnabled()) { |
| 913 infobar_service()->RemoveInfoBar(infobar_service()->infobar_at(0)); | 951 infobar_service()->RemoveInfoBar(infobar_service()->infobar_at(0)); |
| 952 |
| 953 // Make the next request appear after having checked that it was posted |
| 954 // to the event loop. |
| 955 ASSERT_TRUE(IsInfoBarShowPending(infobar_manager())); |
| 956 ShowNextQueuedInfoBar(infobar_manager()); |
| 957 } |
| 914 CheckTabContentsState(requesting_frame_0, CONTENT_SETTING_ALLOW); | 958 CheckTabContentsState(requesting_frame_0, CONTENT_SETTING_ALLOW); |
| 915 CheckPermissionMessageSent(0, true); | 959 CheckPermissionMessageSent(0, true); |
| 916 | 960 |
| 917 // Verify that accepting the first didn't accept because it's embedded | 961 // Verify that accepting the first didn't accept because it's embedded |
| 918 // in the other. | 962 // in the other. |
| 919 EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(), | 963 EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(), |
| 920 requesting_frame_0.GetOrigin(), | 964 requesting_frame_0.GetOrigin(), |
| 921 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), | 965 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), |
| 922 10); | 966 10); |
| 923 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(), | 967 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(), |
| (...skipping 30 matching lines...) Expand all Loading... |
| 954 // it is the embedder. | 998 // it is the embedder. |
| 955 EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(), | 999 EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(), |
| 956 requesting_frame_0.GetOrigin(), | 1000 requesting_frame_0.GetOrigin(), |
| 957 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), | 1001 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), |
| 958 13); | 1002 13); |
| 959 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(), | 1003 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(), |
| 960 requesting_frame_0.GetOrigin(), | 1004 requesting_frame_0.GetOrigin(), |
| 961 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), | 1005 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), |
| 962 11); | 1006 11); |
| 963 } | 1007 } |
| OLD | NEW |