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

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

Issue 1337903002: permissions: remove PermissionQueueController and introduce PermissionInfoBarManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@callbacks-delegates
Patch Set: Just a rebase Created 5 years, 2 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
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/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 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 url, content::Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); 232 url, content::Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
232 content::NavigationEntry* entry = new_tab->GetController().GetPendingEntry(); 233 content::NavigationEntry* entry = new_tab->GetController().GetPendingEntry();
233 content::RenderFrameHostTester::For(new_tab->GetMainFrame()) 234 content::RenderFrameHostTester::For(new_tab->GetMainFrame())
234 ->SendNavigate(extra_tabs_.size() + 1, entry->GetUniqueID(), true, url); 235 ->SendNavigate(extra_tabs_.size() + 1, entry->GetUniqueID(), true, url);
235 236
236 // Set up required helpers, and make this be as "tabby" as the code requires. 237 // Set up required helpers, and make this be as "tabby" as the code requires.
237 #if defined(ENABLE_EXTENSIONS) 238 #if defined(ENABLE_EXTENSIONS)
238 extensions::SetViewType(new_tab, extensions::VIEW_TYPE_TAB_CONTENTS); 239 extensions::SetViewType(new_tab, extensions::VIEW_TYPE_TAB_CONTENTS);
239 #endif 240 #endif
240 InfoBarService::CreateForWebContents(new_tab); 241 InfoBarService::CreateForWebContents(new_tab);
242 PermissionInfoBarManager::CreateForWebContents(new_tab);
241 if (BubbleEnabled()) { 243 if (BubbleEnabled()) {
242 PermissionBubbleManager::CreateForWebContents(new_tab); 244 PermissionBubbleManager::CreateForWebContents(new_tab);
243 PermissionBubbleManager* permission_bubble_manager = 245 PermissionBubbleManager* permission_bubble_manager =
244 PermissionBubbleManager::FromWebContents(new_tab); 246 PermissionBubbleManager::FromWebContents(new_tab);
245 MockPermissionBubbleView::SetFactory(permission_bubble_manager, false); 247 MockPermissionBubbleView::SetFactory(permission_bubble_manager, false);
246 permission_bubble_manager->DisplayPendingRequests(); 248 permission_bubble_manager->DisplayPendingRequests();
247 } 249 }
248 250
249 extra_tabs_.push_back(new_tab); 251 extra_tabs_.push_back(new_tab);
250 } 252 }
(...skipping 15 matching lines...) Expand all
266 } 268 }
267 269
268 void GeolocationPermissionContextTests::SetUp() { 270 void GeolocationPermissionContextTests::SetUp() {
269 ChromeRenderViewHostTestHarness::SetUp(); 271 ChromeRenderViewHostTestHarness::SetUp();
270 272
271 // Set up required helpers, and make this be as "tabby" as the code requires. 273 // Set up required helpers, and make this be as "tabby" as the code requires.
272 #if defined(ENABLE_EXTENSIONS) 274 #if defined(ENABLE_EXTENSIONS)
273 extensions::SetViewType(web_contents(), extensions::VIEW_TYPE_TAB_CONTENTS); 275 extensions::SetViewType(web_contents(), extensions::VIEW_TYPE_TAB_CONTENTS);
274 #endif 276 #endif
275 InfoBarService::CreateForWebContents(web_contents()); 277 InfoBarService::CreateForWebContents(web_contents());
278 PermissionInfoBarManager::CreateForWebContents(web_contents());
276 TabSpecificContentSettings::CreateForWebContents(web_contents()); 279 TabSpecificContentSettings::CreateForWebContents(web_contents());
277 geolocation_permission_context_ = 280 geolocation_permission_context_ =
278 GeolocationPermissionContextFactory::GetForProfile(profile()); 281 GeolocationPermissionContextFactory::GetForProfile(profile());
279 #if defined(OS_ANDROID) 282 #if defined(OS_ANDROID)
280 static_cast<GeolocationPermissionContextAndroid*>( 283 static_cast<GeolocationPermissionContextAndroid*>(
281 geolocation_permission_context_) 284 geolocation_permission_context_)
282 ->SetLocationSettingsForTesting( 285 ->SetLocationSettingsForTesting(
283 scoped_ptr<LocationSettings>(new MockLocationSettings())); 286 scoped_ptr<LocationSettings>(new MockLocationSettings()));
284 MockLocationSettings::SetLocationStatus(true, true); 287 MockLocationSettings::SetLocationStatus(true, true);
285 #endif 288 #endif
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 // Accept the permission in tab A0. 691 // Accept the permission in tab A0.
689 if (BubbleEnabled()) { 692 if (BubbleEnabled()) {
690 AcceptBubble(manager_a0); 693 AcceptBubble(manager_a0);
691 } else { 694 } else {
692 infobars::InfoBar* infobar_a0 = infobar_service()->infobar_at(0); 695 infobars::InfoBar* infobar_a0 = infobar_service()->infobar_at(0);
693 ConfirmInfoBarDelegate* infobar_delegate_a0 = 696 ConfirmInfoBarDelegate* infobar_delegate_a0 =
694 infobar_a0->delegate()->AsConfirmInfoBarDelegate(); 697 infobar_a0->delegate()->AsConfirmInfoBarDelegate();
695 ASSERT_TRUE(infobar_delegate_a0); 698 ASSERT_TRUE(infobar_delegate_a0);
696 infobar_delegate_a0->Accept(); 699 infobar_delegate_a0->Accept();
697 infobar_service()->RemoveInfoBar(infobar_a0); 700 infobar_service()->RemoveInfoBar(infobar_a0);
698 EXPECT_EQ(2U, closed_infobar_tracker_.size()); 701 EXPECT_EQ(1U, closed_infobar_tracker_.size());
699 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_a0)); 702 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_a0));
700 } 703 }
701 CheckPermissionMessageSent(0, true); 704 CheckPermissionMessageSent(0, true);
702 // Because they're the same origin, this will cause tab A1's infobar to 705 // Because they're the same origin, tab_a1's bubble/infobar should disappear.
703 // disappear. It does not cause the bubble to disappear: crbug.com/443013. 706 // In the past, infobar used to disappear and bubble did not.
704 // TODO(felt): Update this test when the bubble's behavior is changed. 707 // Now both have a consistent behviour (albiet broken) of not removing
708 // the bubble/infobar: see crbug.com/443013.
709 // TODO(felt): Update this test when this behavior is changed.
705 if (BubbleEnabled()) 710 if (BubbleEnabled())
706 ASSERT_EQ(1U, GetBubblesQueueSize(manager_a1)); 711 ASSERT_EQ(1U, GetBubblesQueueSize(manager_a1));
707 else 712 else
708 CheckPermissionMessageSentForTab(1, 0, true); 713 EXPECT_EQ(1U, infobar_service_for_tab(1)->infobar_count());
709 714
710 // Either way, tab B should still have a pending permission request. 715 // Either way, tab B should still have a pending permission request.
711 if (BubbleEnabled()) 716 if (BubbleEnabled())
712 ASSERT_EQ(1U, GetBubblesQueueSize(manager_b)); 717 ASSERT_EQ(1U, GetBubblesQueueSize(manager_b));
713 else 718 else
714 ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count()); 719 ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count());
715 } 720 }
716 721
717 TEST_F(GeolocationPermissionContextTests, QueuedOriginMultipleTabs) { 722 TEST_F(GeolocationPermissionContextTests, QueuedOriginMultipleTabs) {
718 GURL url_a("http://www.example.com/geolocation"); 723 GURL url_a("http://www.example.com/geolocation");
(...skipping 28 matching lines...) Expand all
747 // Accept the first request in tab A1. 752 // Accept the first request in tab A1.
748 if (BubbleEnabled()) { 753 if (BubbleEnabled()) {
749 AcceptBubble(manager_a1); 754 AcceptBubble(manager_a1);
750 } else { 755 } else {
751 infobars::InfoBar* infobar_a1 = infobar_service_for_tab(0)->infobar_at(0); 756 infobars::InfoBar* infobar_a1 = infobar_service_for_tab(0)->infobar_at(0);
752 ConfirmInfoBarDelegate* infobar_delegate_a1 = 757 ConfirmInfoBarDelegate* infobar_delegate_a1 =
753 infobar_a1->delegate()->AsConfirmInfoBarDelegate(); 758 infobar_a1->delegate()->AsConfirmInfoBarDelegate();
754 ASSERT_TRUE(infobar_delegate_a1); 759 ASSERT_TRUE(infobar_delegate_a1);
755 infobar_delegate_a1->Accept(); 760 infobar_delegate_a1->Accept();
756 infobar_service_for_tab(0)->RemoveInfoBar(infobar_a1); 761 infobar_service_for_tab(0)->RemoveInfoBar(infobar_a1);
757 EXPECT_EQ(2U, closed_infobar_tracker_.size()); 762 EXPECT_EQ(1U, closed_infobar_tracker_.size());
758 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_a1)); 763 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_a1));
759 } 764 }
760 CheckPermissionMessageSentForTab(0, 0, true); 765 CheckPermissionMessageSentForTab(0, 0, true);
761 766
762 // Because they're the same origin, this will cause tab A0's infobar to 767 // 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. 768 // In the past, infobar used to disappear and bubble did not.
764 // TODO(felt): Update this test when the bubble's behavior is changed. 769 // Now both have a consistent behviour (albiet broken) of not removing
765 if (BubbleEnabled()) { 770 // the bubble/infobar: see crbug.com/443013.
771 // TODO(felt): Update this test when this behavior is changed.
772 if (BubbleEnabled())
766 EXPECT_EQ(1U, GetBubblesQueueSize(manager_a0)); 773 EXPECT_EQ(1U, GetBubblesQueueSize(manager_a0));
767 } else { 774 else
768 EXPECT_EQ(0U, infobar_service()->infobar_count()); 775 EXPECT_EQ(1U, infobar_service()->infobar_count());
769 CheckPermissionMessageSent(0, true);
770 }
771 776
772 // The second request should now be visible in tab A1. 777 // The second request should now be visible in tab A1.
773 if (BubbleEnabled()) 778 if (BubbleEnabled())
774 ASSERT_EQ(1U, GetBubblesQueueSize(manager_a1)); 779 ASSERT_EQ(1U, GetBubblesQueueSize(manager_a1));
775 else 780 else
776 ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count()); 781 ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count());
777 782
778 // Accept the second request and check that it's gone. 783 // Accept the second request and check that it's gone.
779 if (BubbleEnabled()) { 784 if (BubbleEnabled()) {
780 AcceptBubble(manager_a1); 785 AcceptBubble(manager_a1);
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
954 // it is the embedder. 959 // it is the embedder.
955 EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(), 960 EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(),
956 requesting_frame_0.GetOrigin(), 961 requesting_frame_0.GetOrigin(),
957 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), 962 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
958 13); 963 13);
959 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(), 964 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(),
960 requesting_frame_0.GetOrigin(), 965 requesting_frame_0.GetOrigin(),
961 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), 966 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
962 11); 967 11);
963 } 968 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698