| Index: chrome/browser/geolocation/geolocation_permission_context_unittest.cc
|
| diff --git a/chrome/browser/geolocation/geolocation_permission_context_unittest.cc b/chrome/browser/geolocation/geolocation_permission_context_unittest.cc
|
| index 52eb422535a06b6af50b93c8bf4975595b87aa71..fa79aa8bfdf6c33cc9a9ba8158cfcfe8b95068d4 100644
|
| --- a/chrome/browser/geolocation/geolocation_permission_context_unittest.cc
|
| +++ b/chrome/browser/geolocation/geolocation_permission_context_unittest.cc
|
| @@ -9,6 +9,7 @@
|
| #include <utility>
|
|
|
| #include "base/bind.h"
|
| +#include "base/command_line.h"
|
| #include "base/containers/hash_tables.h"
|
| #include "base/id_map.h"
|
| #include "base/memory/scoped_vector.h"
|
| @@ -19,6 +20,10 @@
|
| #include "chrome/browser/content_settings/tab_specific_content_settings.h"
|
| #include "chrome/browser/geolocation/geolocation_permission_context_factory.h"
|
| #include "chrome/browser/infobars/infobar_service.h"
|
| +#include "chrome/browser/ui/website_settings/mock_permission_bubble_view.h"
|
| +#include "chrome/browser/ui/website_settings/permission_bubble_manager.h"
|
| +#include "chrome/browser/ui/website_settings/permission_bubble_request.h"
|
| +#include "chrome/common/chrome_switches.h"
|
| #include "chrome/test/base/chrome_render_view_host_test_harness.h"
|
| #include "chrome/test/base/testing_profile.h"
|
| #include "components/content_settings/core/browser/host_content_settings_map.h"
|
| @@ -120,7 +125,8 @@ class GeolocationPermissionContextTests
|
|
|
| void RequestGeolocationPermission(content::WebContents* web_contents,
|
| const PermissionRequestID& id,
|
| - const GURL& requesting_frame);
|
| + const GURL& requesting_frame,
|
| + bool user_gesture);
|
|
|
| void PermissionResponse(const PermissionRequestID& id,
|
| bool allowed);
|
| @@ -132,10 +138,18 @@ class GeolocationPermissionContextTests
|
| void AddNewTab(const GURL& url);
|
| void CheckTabContentsState(const GURL& requesting_frame,
|
| ContentSetting expected_content_setting);
|
| + size_t GetBubblesQueueSize(PermissionBubbleManager* manager);
|
| + void AcceptBubble(PermissionBubbleManager* manager);
|
| + void DenyBubble(PermissionBubbleManager* manager);
|
| + void CloseBubble(PermissionBubbleManager* manager);
|
| + void BubbleManagerDocumentLoadCompleted();
|
| + void BubbleManagerDocumentLoadCompleted(content::WebContents* web_contents);
|
| + ContentSetting GetGeolocationContentSetting(GURL frame_0, GURL frame_1);
|
|
|
| // owned by the browser context
|
| GeolocationPermissionContext* geolocation_permission_context_;
|
| ClosedInfoBarTracker closed_infobar_tracker_;
|
| + MockPermissionBubbleView bubble_view_;
|
| ScopedVector<content::WebContents> extra_tabs_;
|
|
|
| // A map between renderer child id and a pair represending the bridge id and
|
| @@ -165,9 +179,10 @@ PermissionRequestID GeolocationPermissionContextTests::RequestIDForTab(
|
| void GeolocationPermissionContextTests::RequestGeolocationPermission(
|
| content::WebContents* web_contents,
|
| const PermissionRequestID& id,
|
| - const GURL& requesting_frame) {
|
| + const GURL& requesting_frame,
|
| + bool user_gesture) {
|
| geolocation_permission_context_->RequestPermission(
|
| - web_contents, id, requesting_frame, false,
|
| + web_contents, id, requesting_frame, user_gesture,
|
| base::Bind(&GeolocationPermissionContextTests::PermissionResponse,
|
| base::Unretained(this), id));
|
| content::RunAllBlockingPoolTasksUntilIdle();
|
| @@ -217,6 +232,8 @@ void GeolocationPermissionContextTests::AddNewTab(const GURL& url) {
|
| extensions::SetViewType(new_tab, extensions::VIEW_TYPE_TAB_CONTENTS);
|
| #endif
|
| InfoBarService::CreateForWebContents(new_tab);
|
| + PermissionBubbleManager::CreateForWebContents(new_tab);
|
| + PermissionBubbleManager::FromWebContents(new_tab)->SetView(&bubble_view_);
|
|
|
| extra_tabs_.push_back(new_tab);
|
| }
|
| @@ -255,6 +272,9 @@ void GeolocationPermissionContextTests::SetUp() {
|
| scoped_ptr<LocationSettings>(new MockLocationSettings()));
|
| MockLocationSettings::SetLocationStatus(true, true);
|
| #endif
|
| + PermissionBubbleManager::CreateForWebContents(web_contents());
|
| + PermissionBubbleManager::FromWebContents(web_contents())->SetView(
|
| + &bubble_view_);
|
| }
|
|
|
| void GeolocationPermissionContextTests::TearDown() {
|
| @@ -262,13 +282,122 @@ void GeolocationPermissionContextTests::TearDown() {
|
| ChromeRenderViewHostTestHarness::TearDown();
|
| }
|
|
|
| +size_t GeolocationPermissionContextTests::GetBubblesQueueSize(
|
| + PermissionBubbleManager* manager) {
|
| + return manager->requests_.size();
|
| +}
|
| +
|
| +void GeolocationPermissionContextTests::AcceptBubble(
|
| + PermissionBubbleManager* manager) {
|
| + manager->Accept();
|
| +}
|
| +
|
| +void GeolocationPermissionContextTests::DenyBubble(
|
| + PermissionBubbleManager* manager) {
|
| + manager->Deny();
|
| +}
|
| +
|
| +void GeolocationPermissionContextTests::CloseBubble(
|
| + PermissionBubbleManager* manager) {
|
| + manager->Closing();
|
| +}
|
| +
|
| +void GeolocationPermissionContextTests::BubbleManagerDocumentLoadCompleted() {
|
| + GeolocationPermissionContextTests::BubbleManagerDocumentLoadCompleted(
|
| + web_contents());
|
| +}
|
| +
|
| +void GeolocationPermissionContextTests::BubbleManagerDocumentLoadCompleted(
|
| + content::WebContents* web_contents) {
|
| + PermissionBubbleManager::FromWebContents(web_contents)->
|
| + DocumentOnLoadCompletedInMainFrame();
|
| +}
|
| +
|
| +ContentSetting GeolocationPermissionContextTests::GetGeolocationContentSetting(
|
| + GURL frame_0, GURL frame_1) {
|
| + return profile()->GetHostContentSettingsMap()->GetContentSetting(
|
| + frame_0, frame_1, CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string());
|
| +}
|
| +
|
| +// Needed to parameterize the tests for both infobars & permission bubbles.
|
| +class GeolocationPermissionContextParamTests :
|
| + public GeolocationPermissionContextTests,
|
| + public ::testing::WithParamInterface<bool> {
|
| + protected:
|
| + GeolocationPermissionContextParamTests() {}
|
| + ~GeolocationPermissionContextParamTests() override {}
|
| +
|
| + bool BubbleEnabled() const {
|
| +#if defined (OS_ANDROID)
|
| + return false;
|
| +#else
|
| + return GetParam();
|
| +#endif
|
| + }
|
| +
|
| + void SetUp() override {
|
| + GeolocationPermissionContextTests::SetUp();
|
| +#if !defined(OS_ANDROID)
|
| + if (BubbleEnabled()) {
|
| + base::CommandLine::ForCurrentProcess()->AppendSwitch(
|
| + switches::kEnablePermissionsBubbles);
|
| + EXPECT_TRUE(PermissionBubbleManager::Enabled());
|
| + } else {
|
| + base::CommandLine::ForCurrentProcess()->AppendSwitch(
|
| + switches::kDisablePermissionsBubbles);
|
| + EXPECT_FALSE(PermissionBubbleManager::Enabled());
|
| + }
|
| +#endif
|
| + }
|
| +
|
| + size_t GetNumberOfPrompts() {
|
| + if (BubbleEnabled()) {
|
| + PermissionBubbleManager* manager =
|
| + PermissionBubbleManager::FromWebContents(web_contents());
|
| + return GetBubblesQueueSize(manager);
|
| + } else {
|
| + return infobar_service()->infobar_count();
|
| + }
|
| + }
|
| +
|
| + void AcceptPrompt() {
|
| + if (BubbleEnabled()) {
|
| + PermissionBubbleManager* manager =
|
| + PermissionBubbleManager::FromWebContents(web_contents());
|
| + AcceptBubble(manager);
|
| + } else {
|
| + infobars::InfoBar* infobar = infobar_service()->infobar_at(0);
|
| + ConfirmInfoBarDelegate* infobar_delegate =
|
| + infobar->delegate()->AsConfirmInfoBarDelegate();
|
| + infobar_delegate->Accept();
|
| + }
|
| + }
|
| +
|
| + base::string16 GetPromptText() {
|
| + if (BubbleEnabled()) {
|
| + PermissionBubbleManager* manager =
|
| + PermissionBubbleManager::FromWebContents(web_contents());
|
| + return manager->requests_.front()->GetMessageText();
|
| + }
|
| + infobars::InfoBar* infobar = infobar_service()->infobar_at(0);
|
| + ConfirmInfoBarDelegate* infobar_delegate =
|
| + infobar->delegate()->AsConfirmInfoBarDelegate();
|
| + return infobar_delegate->GetMessageText();
|
| + }
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(GeolocationPermissionContextParamTests);
|
| +};
|
| +
|
| // Tests ----------------------------------------------------------------------
|
|
|
| -TEST_F(GeolocationPermissionContextTests, SinglePermission) {
|
| +TEST_P(GeolocationPermissionContextParamTests, SinglePermissionInfobar) {
|
| + if (BubbleEnabled()) return;
|
| +
|
| GURL requesting_frame("http://www.example.com/geolocation");
|
| NavigateAndCommit(requesting_frame);
|
| EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame);
|
| + RequestGeolocationPermission(
|
| + web_contents(), RequestID(0), requesting_frame, true);
|
| ASSERT_EQ(1U, infobar_service()->infobar_count());
|
| infobars::InfoBar* infobar = infobar_service()->infobar_at(0);
|
| ConfirmInfoBarDelegate* infobar_delegate =
|
| @@ -280,13 +409,28 @@ TEST_F(GeolocationPermissionContextTests, SinglePermission) {
|
| EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar));
|
| }
|
|
|
| +TEST_P(GeolocationPermissionContextParamTests, SinglePermissionBubble) {
|
| + if (!BubbleEnabled()) return;
|
| +
|
| + GURL requesting_frame("http://www.example.com/geolocation");
|
| + NavigateAndCommit(requesting_frame);
|
| + BubbleManagerDocumentLoadCompleted();
|
| +
|
| + EXPECT_EQ(0U, GetNumberOfPrompts());
|
| + RequestGeolocationPermission(
|
| + web_contents(), RequestID(0), requesting_frame, true);
|
| + ASSERT_EQ(1U, GetNumberOfPrompts());
|
| +}
|
| +
|
| #if defined(OS_ANDROID)
|
| +// Infobar-only tests; Android doesn't support permission bubbles.
|
| TEST_F(GeolocationPermissionContextTests, GeolocationEnabledDisabled) {
|
| GURL requesting_frame("http://www.example.com/geolocation");
|
| NavigateAndCommit(requesting_frame);
|
| MockLocationSettings::SetLocationStatus(true, true);
|
| EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame);
|
| + RequestGeolocationPermission(
|
| + web_contents(), RequestID(0), requesting_frame, true);
|
| EXPECT_EQ(1U, infobar_service()->infobar_count());
|
| ConfirmInfoBarDelegate* infobar_delegate_0 =
|
| infobar_service()->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate();
|
| @@ -297,7 +441,8 @@ TEST_F(GeolocationPermissionContextTests, GeolocationEnabledDisabled) {
|
| Reload();
|
| MockLocationSettings::SetLocationStatus(true, false);
|
| EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame);
|
| + RequestGeolocationPermission(
|
| + web_contents(), RequestID(0), requesting_frame, true);
|
| EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| }
|
|
|
| @@ -306,7 +451,8 @@ TEST_F(GeolocationPermissionContextTests, MasterEnabledGoogleAppsEnabled) {
|
| NavigateAndCommit(requesting_frame);
|
| MockLocationSettings::SetLocationStatus(true, true);
|
| EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame);
|
| + RequestGeolocationPermission(
|
| + web_contents(), RequestID(0), requesting_frame, true);
|
| EXPECT_EQ(1U, infobar_service()->infobar_count());
|
| ConfirmInfoBarDelegate* infobar_delegate =
|
| infobar_service()->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate();
|
| @@ -321,339 +467,383 @@ TEST_F(GeolocationPermissionContextTests, MasterEnabledGoogleAppsDisabled) {
|
| NavigateAndCommit(requesting_frame);
|
| MockLocationSettings::SetLocationStatus(true, false);
|
| EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame);
|
| + RequestGeolocationPermission(
|
| + web_contents(), RequestID(0), requesting_frame, true);
|
| EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| }
|
| #endif
|
|
|
| -TEST_F(GeolocationPermissionContextTests, QueuedPermission) {
|
| +TEST_P(GeolocationPermissionContextParamTests, QueuedPermission) {
|
| GURL requesting_frame_0("http://www.example.com/geolocation");
|
| GURL requesting_frame_1("http://www.example-2.com/geolocation");
|
| - EXPECT_EQ(CONTENT_SETTING_ASK,
|
| - profile()->GetHostContentSettingsMap()->GetContentSetting(
|
| - requesting_frame_0, requesting_frame_0,
|
| - CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
|
| - EXPECT_EQ(CONTENT_SETTING_ASK,
|
| - profile()->GetHostContentSettingsMap()->GetContentSetting(
|
| - requesting_frame_1, requesting_frame_0,
|
| - CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
|
| + EXPECT_EQ(
|
| + CONTENT_SETTING_ASK,
|
| + GetGeolocationContentSetting(requesting_frame_0, requesting_frame_1));
|
| + EXPECT_EQ(
|
| + CONTENT_SETTING_ASK,
|
| + GetGeolocationContentSetting(requesting_frame_1, requesting_frame_1));
|
|
|
| NavigateAndCommit(requesting_frame_0);
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| + if (BubbleEnabled()) BubbleManagerDocumentLoadCompleted();
|
| +
|
| + // Check that no permission requests have happened yet.
|
| + EXPECT_EQ(0U, GetNumberOfPrompts());
|
| +
|
| // Request permission for two frames.
|
| RequestGeolocationPermission(
|
| - web_contents(), RequestID(0), requesting_frame_0);
|
| + web_contents(), RequestID(0), requesting_frame_0, true);
|
| RequestGeolocationPermission(
|
| - web_contents(), RequestID(1), requesting_frame_1);
|
| + web_contents(), RequestID(1), requesting_frame_1, true);
|
| // Ensure only one infobar is created.
|
| - ASSERT_EQ(1U, infobar_service()->infobar_count());
|
| - infobars::InfoBar* infobar_0 = infobar_service()->infobar_at(0);
|
| - ConfirmInfoBarDelegate* infobar_delegate_0 =
|
| - infobar_0->delegate()->AsConfirmInfoBarDelegate();
|
| - ASSERT_TRUE(infobar_delegate_0);
|
| - base::string16 text_0 = infobar_delegate_0->GetMessageText();
|
| + ASSERT_EQ(1U, GetNumberOfPrompts());
|
| + base::string16 text_0 = GetPromptText();
|
|
|
| // Accept the first frame.
|
| - infobar_delegate_0->Accept();
|
| + AcceptPrompt();
|
| CheckTabContentsState(requesting_frame_0, CONTENT_SETTING_ALLOW);
|
| CheckPermissionMessageSent(0, true);
|
|
|
| - infobar_service()->RemoveInfoBar(infobar_0);
|
| - EXPECT_EQ(1U, closed_infobar_tracker_.size());
|
| - EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_0));
|
| - closed_infobar_tracker_.Clear();
|
| + if (!BubbleEnabled()) {
|
| + infobars::InfoBar* infobar_0 = infobar_service()->infobar_at(0);
|
| + infobar_service()->RemoveInfoBar(infobar_0);
|
| + EXPECT_EQ(1U, closed_infobar_tracker_.size());
|
| + EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_0));
|
| + closed_infobar_tracker_.Clear();
|
| + }
|
| +
|
| // Now we should have a new infobar for the second frame.
|
| - ASSERT_EQ(1U, infobar_service()->infobar_count());
|
| + ASSERT_EQ(1U, GetNumberOfPrompts());
|
| + base::string16 text_1 = GetPromptText();
|
|
|
| - infobars::InfoBar* infobar_1 = infobar_service()->infobar_at(0);
|
| - ConfirmInfoBarDelegate* infobar_delegate_1 =
|
| - infobar_1->delegate()->AsConfirmInfoBarDelegate();
|
| - ASSERT_TRUE(infobar_delegate_1);
|
| - base::string16 text_1 = infobar_delegate_1->GetMessageText();
|
| + // Check that the messages differ.
|
| EXPECT_NE(text_0, text_1);
|
|
|
| // Cancel (block) this frame.
|
| - infobar_delegate_1->Cancel();
|
| + if (BubbleEnabled()) {
|
| + PermissionBubbleManager* manager =
|
| + PermissionBubbleManager::FromWebContents(web_contents());
|
| + DenyBubble(manager);
|
| + } else {
|
| + infobars::InfoBar* infobar_1 = infobar_service()->infobar_at(0);
|
| + infobar_1->delegate()->AsConfirmInfoBarDelegate()->Cancel();
|
| + }
|
| CheckTabContentsState(requesting_frame_1, CONTENT_SETTING_BLOCK);
|
| CheckPermissionMessageSent(1, false);
|
| - infobar_service()->RemoveInfoBar(infobar_1);
|
| - EXPECT_EQ(1U, closed_infobar_tracker_.size());
|
| - EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_1));
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - // Ensure the persisted permissions are ok.
|
| - EXPECT_EQ(CONTENT_SETTING_ALLOW,
|
| - profile()->GetHostContentSettingsMap()->GetContentSetting(
|
| - requesting_frame_0, requesting_frame_0,
|
| - CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
|
|
|
| - EXPECT_EQ(CONTENT_SETTING_BLOCK,
|
| - profile()->GetHostContentSettingsMap()->GetContentSetting(
|
| - requesting_frame_1, requesting_frame_0,
|
| - CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
|
| + // Ensure the persisted permissions are ok.
|
| + EXPECT_EQ(
|
| + CONTENT_SETTING_ALLOW,
|
| + GetGeolocationContentSetting(requesting_frame_0, requesting_frame_0));
|
| + EXPECT_EQ(
|
| + CONTENT_SETTING_BLOCK,
|
| + GetGeolocationContentSetting(requesting_frame_1, requesting_frame_0));
|
| }
|
|
|
| -TEST_F(GeolocationPermissionContextTests, HashIsIgnored) {
|
| +TEST_P(GeolocationPermissionContextParamTests, HashIsIgnored) {
|
| GURL url_a("http://www.example.com/geolocation#a");
|
| GURL url_b("http://www.example.com/geolocation#b");
|
|
|
| - // Navigate to the first url and check permission is requested.
|
| + // Navigate to the first url.
|
| NavigateAndCommit(url_a);
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - RequestGeolocationPermission(web_contents(), RequestID(0), url_a);
|
| - ASSERT_EQ(1U, infobar_service()->infobar_count());
|
| - infobars::InfoBar* infobar = infobar_service()->infobar_at(0);
|
| - ConfirmInfoBarDelegate* infobar_delegate =
|
| - infobar->delegate()->AsConfirmInfoBarDelegate();
|
| - ASSERT_TRUE(infobar_delegate);
|
| + if (BubbleEnabled()) BubbleManagerDocumentLoadCompleted();
|
| +
|
| + // Check permission is requested.
|
| + ASSERT_EQ(0U, GetNumberOfPrompts());
|
| + RequestGeolocationPermission(
|
| + web_contents(), RequestID(0), url_a, BubbleEnabled());
|
| + ASSERT_EQ(1U, GetNumberOfPrompts());
|
|
|
| // Change the hash, we'll still be on the same page.
|
| NavigateAndCommit(url_b);
|
| + if (BubbleEnabled()) BubbleManagerDocumentLoadCompleted();
|
|
|
| // Accept.
|
| - infobar_delegate->Accept();
|
| + AcceptPrompt();
|
| CheckTabContentsState(url_a, CONTENT_SETTING_ALLOW);
|
| CheckTabContentsState(url_b, CONTENT_SETTING_ALLOW);
|
| CheckPermissionMessageSent(0, true);
|
|
|
| // Cleanup.
|
| - infobar_service()->RemoveInfoBar(infobar);
|
| - EXPECT_EQ(1U, closed_infobar_tracker_.size());
|
| - EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar));
|
| + if (!BubbleEnabled()) {
|
| + infobars::InfoBar* infobar = infobar_service()->infobar_at(0);
|
| + infobar_service()->RemoveInfoBar(infobar);
|
| + EXPECT_EQ(1U, closed_infobar_tracker_.size());
|
| + EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar));
|
| + }
|
| }
|
|
|
| -TEST_F(GeolocationPermissionContextTests, PermissionForFileScheme) {
|
| +TEST_P(GeolocationPermissionContextParamTests, PermissionForFileScheme) {
|
| + // TODO(felt): The bubble is rejecting file:// permission requests.
|
| + // Fix and enable this test. crbug.com/444047
|
| + if (BubbleEnabled()) return;
|
| +
|
| GURL requesting_frame("file://example/geolocation.html");
|
| NavigateAndCommit(requesting_frame);
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame);
|
| - EXPECT_EQ(1U, infobar_service()->infobar_count());
|
| - infobars::InfoBar* infobar = infobar_service()->infobar_at(0);
|
| - ConfirmInfoBarDelegate* infobar_delegate =
|
| - infobar->delegate()->AsConfirmInfoBarDelegate();
|
| - ASSERT_TRUE(infobar_delegate);
|
| + if (BubbleEnabled()) BubbleManagerDocumentLoadCompleted();
|
| +
|
| + // Check permission is requested.
|
| + ASSERT_EQ(0U, GetNumberOfPrompts());
|
| + RequestGeolocationPermission(
|
| + web_contents(), RequestID(0), requesting_frame, true);
|
| + EXPECT_EQ(1U, GetNumberOfPrompts());
|
| +
|
| // Accept the frame.
|
| - infobar_delegate->Accept();
|
| + AcceptPrompt();
|
| CheckTabContentsState(requesting_frame, CONTENT_SETTING_ALLOW);
|
| CheckPermissionMessageSent(0, true);
|
| - infobar_service()->RemoveInfoBar(infobar);
|
|
|
| // Make sure the setting is not stored.
|
| - EXPECT_EQ(CONTENT_SETTING_ASK,
|
| - profile()->GetHostContentSettingsMap()->GetContentSetting(
|
| - requesting_frame,
|
| - requesting_frame,
|
| - CONTENT_SETTINGS_TYPE_GEOLOCATION,
|
| - std::string()));
|
| + EXPECT_EQ(
|
| + CONTENT_SETTING_ASK,
|
| + GetGeolocationContentSetting(requesting_frame, requesting_frame));
|
| }
|
|
|
| -TEST_F(GeolocationPermissionContextTests, CancelGeolocationPermissionRequest) {
|
| - GURL requesting_frame_0("http://www.example.com/geolocation");
|
| - GURL requesting_frame_1("http://www.example-2.com/geolocation");
|
| - EXPECT_EQ(CONTENT_SETTING_ASK,
|
| - profile()->GetHostContentSettingsMap()->GetContentSetting(
|
| - requesting_frame_0, requesting_frame_0,
|
| - CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
|
| +TEST_P(GeolocationPermissionContextParamTests,
|
| + CancelGeolocationPermissionRequest) {
|
| + GURL frame_0("http://www.example.com/geolocation");
|
| + GURL frame_1("http://www.example-2.com/geolocation");
|
| + EXPECT_EQ(
|
| + CONTENT_SETTING_ASK, GetGeolocationContentSetting(frame_0, frame_0));
|
| + EXPECT_EQ(
|
| + CONTENT_SETTING_ASK, GetGeolocationContentSetting(frame_1, frame_0));
|
|
|
| - EXPECT_EQ(CONTENT_SETTING_ASK,
|
| - profile()->GetHostContentSettingsMap()->GetContentSetting(
|
| - requesting_frame_1, requesting_frame_0,
|
| - CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
|
| + NavigateAndCommit(frame_0);
|
| + if (BubbleEnabled()) BubbleManagerDocumentLoadCompleted();
|
|
|
| - NavigateAndCommit(requesting_frame_0);
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| + ASSERT_EQ(0U, GetNumberOfPrompts());
|
|
|
| // Request permission for two frames.
|
| RequestGeolocationPermission(
|
| - web_contents(), RequestID(0), requesting_frame_0);
|
| + web_contents(), RequestID(0), frame_0, true);
|
| RequestGeolocationPermission(
|
| - web_contents(), RequestID(1), requesting_frame_1);
|
| - ASSERT_EQ(1U, infobar_service()->infobar_count());
|
| -
|
| - infobars::InfoBar* infobar_0 = infobar_service()->infobar_at(0);
|
| - ConfirmInfoBarDelegate* infobar_delegate_0 =
|
| - infobar_0->delegate()->AsConfirmInfoBarDelegate();
|
| - ASSERT_TRUE(infobar_delegate_0);
|
| - base::string16 text_0 = infobar_delegate_0->GetMessageText();
|
| -
|
| - // Simulate the frame going away, ensure the infobar for this frame
|
| - // is removed and the next pending infobar is created.
|
| - geolocation_permission_context_->CancelPermissionRequest(web_contents(),
|
| - RequestID(0));
|
| - EXPECT_EQ(1U, closed_infobar_tracker_.size());
|
| - EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_0));
|
| - closed_infobar_tracker_.Clear();
|
| - ASSERT_EQ(1U, infobar_service()->infobar_count());
|
| + web_contents(), RequestID(1), frame_1, true);
|
| +
|
| + // Get the first permission request text.
|
| + ASSERT_EQ(1U, GetNumberOfPrompts());
|
| + base::string16 text_0 = GetPromptText();
|
| + ASSERT_FALSE(text_0.empty());
|
| +
|
| + // Simulate the frame going away; the request should be removed.
|
| + if (BubbleEnabled()) {
|
| + PermissionBubbleManager* manager =
|
| + PermissionBubbleManager::FromWebContents(web_contents());
|
| + CloseBubble(manager);
|
| + } else {
|
| + geolocation_permission_context_->CancelPermissionRequest(web_contents(),
|
| + RequestID(0));
|
| + }
|
|
|
| - infobars::InfoBar* infobar_1 = infobar_service()->infobar_at(0);
|
| - ConfirmInfoBarDelegate* infobar_delegate_1 =
|
| - infobar_1->delegate()->AsConfirmInfoBarDelegate();
|
| - ASSERT_TRUE(infobar_delegate_1);
|
| - base::string16 text_1 = infobar_delegate_1->GetMessageText();
|
| + // Check that the next pending request is created correctly.
|
| + base::string16 text_1 = GetPromptText();
|
| EXPECT_NE(text_0, text_1);
|
|
|
| - // Allow this frame.
|
| - infobar_delegate_1->Accept();
|
| - CheckTabContentsState(requesting_frame_1, CONTENT_SETTING_ALLOW);
|
| + // Allow this frame and check that it worked.
|
| + AcceptPrompt();
|
| + CheckTabContentsState(frame_1, CONTENT_SETTING_ALLOW);
|
| CheckPermissionMessageSent(1, true);
|
| - infobar_service()->RemoveInfoBar(infobar_1);
|
| - EXPECT_EQ(1U, closed_infobar_tracker_.size());
|
| - EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_1));
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - // Ensure the persisted permissions are ok.
|
| - EXPECT_EQ(CONTENT_SETTING_ASK,
|
| - profile()->GetHostContentSettingsMap()->GetContentSetting(
|
| - requesting_frame_0, requesting_frame_0,
|
| - CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
|
|
|
| - EXPECT_EQ(CONTENT_SETTING_ALLOW,
|
| - profile()->GetHostContentSettingsMap()->GetContentSetting(
|
| - requesting_frame_1, requesting_frame_0,
|
| - CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
|
| + // Ensure the persisted permissions are ok.
|
| + EXPECT_EQ(
|
| + CONTENT_SETTING_ASK, GetGeolocationContentSetting(frame_0, frame_0));
|
| + EXPECT_EQ(
|
| + CONTENT_SETTING_ALLOW, GetGeolocationContentSetting(frame_1, frame_0));
|
| }
|
|
|
| -TEST_F(GeolocationPermissionContextTests, InvalidURL) {
|
| +TEST_P(GeolocationPermissionContextParamTests, InvalidURL) {
|
| + // Navigate to the first url.
|
| GURL invalid_embedder("about:blank");
|
| GURL requesting_frame;
|
| NavigateAndCommit(invalid_embedder);
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame);
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| + if (BubbleEnabled()) BubbleManagerDocumentLoadCompleted();
|
| +
|
| + // Nothing should be displayed.
|
| + EXPECT_EQ(0U, GetNumberOfPrompts());
|
| + RequestGeolocationPermission(
|
| + web_contents(), RequestID(0), requesting_frame, true);
|
| + EXPECT_EQ(0U, GetNumberOfPrompts());
|
| CheckPermissionMessageSent(0, false);
|
| }
|
|
|
| -TEST_F(GeolocationPermissionContextTests, SameOriginMultipleTabs) {
|
| +TEST_P(GeolocationPermissionContextParamTests, SameOriginMultipleTabs) {
|
| GURL url_a("http://www.example.com/geolocation");
|
| GURL url_b("http://www.example-2.com/geolocation");
|
| - NavigateAndCommit(url_a);
|
| - AddNewTab(url_b);
|
| - AddNewTab(url_a);
|
| -
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - RequestGeolocationPermission(web_contents(), RequestID(0), url_a);
|
| - ASSERT_EQ(1U, infobar_service()->infobar_count());
|
| -
|
| - RequestGeolocationPermission(extra_tabs_[0], RequestIDForTab(0, 0), url_b);
|
| - EXPECT_EQ(1U, infobar_service_for_tab(0)->infobar_count());
|
| -
|
| - RequestGeolocationPermission(extra_tabs_[1], RequestIDForTab(1, 0), url_a);
|
| - ASSERT_EQ(1U, infobar_service_for_tab(1)->infobar_count());
|
| -
|
| - infobars::InfoBar* removed_infobar =
|
| - infobar_service_for_tab(1)->infobar_at(0);
|
| + NavigateAndCommit(url_a); // Tab A0
|
| + AddNewTab(url_b); // Tab B (extra_tabs_[0])
|
| + AddNewTab(url_a); // Tab A1 (extra_tabs_[1])
|
| + if (BubbleEnabled()) {
|
| + BubbleManagerDocumentLoadCompleted();
|
| + BubbleManagerDocumentLoadCompleted(extra_tabs_[0]);
|
| + BubbleManagerDocumentLoadCompleted(extra_tabs_[1]);
|
| + }
|
| + PermissionBubbleManager* manager_a0 =
|
| + PermissionBubbleManager::FromWebContents(web_contents());
|
| + PermissionBubbleManager* manager_b =
|
| + PermissionBubbleManager::FromWebContents(extra_tabs_[0]);
|
| + PermissionBubbleManager* manager_a1 =
|
| + PermissionBubbleManager::FromWebContents(extra_tabs_[1]);
|
| +
|
| + // Request permission in all three tabs.
|
| + RequestGeolocationPermission(
|
| + web_contents(), RequestID(0), url_a, true);
|
| + RequestGeolocationPermission(
|
| + extra_tabs_[0], RequestIDForTab(0, 0), url_b, true);
|
| + RequestGeolocationPermission(
|
| + extra_tabs_[1], RequestIDForTab(1, 0), url_a, true);
|
| + ASSERT_EQ(1U, GetNumberOfPrompts()); // For A0.
|
| + if (BubbleEnabled()) {
|
| + ASSERT_EQ(1U, GetBubblesQueueSize(manager_b));
|
| + ASSERT_EQ(1U, GetBubblesQueueSize(manager_a1));
|
| + } else {
|
| + ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count());
|
| + ASSERT_EQ(1U, infobar_service_for_tab(1)->infobar_count());
|
| + }
|
|
|
| - // Accept the first tab.
|
| - infobars::InfoBar* infobar_0 = infobar_service()->infobar_at(0);
|
| - ConfirmInfoBarDelegate* infobar_delegate_0 =
|
| - infobar_0->delegate()->AsConfirmInfoBarDelegate();
|
| - ASSERT_TRUE(infobar_delegate_0);
|
| - infobar_delegate_0->Accept();
|
| + // Accept the permission in tab A0.
|
| + if (BubbleEnabled()) {
|
| + AcceptBubble(manager_a0);
|
| + } else {
|
| + infobars::InfoBar* infobar_a0 = infobar_service()->infobar_at(0);
|
| + ConfirmInfoBarDelegate* infobar_delegate_a0 =
|
| + infobar_a0->delegate()->AsConfirmInfoBarDelegate();
|
| + ASSERT_TRUE(infobar_delegate_a0);
|
| + infobar_delegate_a0->Accept();
|
| + infobar_service()->RemoveInfoBar(infobar_a0);
|
| + EXPECT_EQ(2U, closed_infobar_tracker_.size());
|
| + EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_a0));
|
| + }
|
| CheckPermissionMessageSent(0, true);
|
| - infobar_service()->RemoveInfoBar(infobar_0);
|
| - EXPECT_EQ(2U, closed_infobar_tracker_.size());
|
| - EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_0));
|
| - // Now the infobar for the tab with the same origin should have gone.
|
| - EXPECT_EQ(0U, infobar_service_for_tab(1)->infobar_count());
|
| - CheckPermissionMessageSentForTab(1, 0, true);
|
| - EXPECT_TRUE(closed_infobar_tracker_.Contains(removed_infobar));
|
| - closed_infobar_tracker_.Clear();
|
| -
|
| - // But the other tab should still have the info bar...
|
| - ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count());
|
| - infobars::InfoBar* infobar_1 = infobar_service_for_tab(0)->infobar_at(0);
|
| - ConfirmInfoBarDelegate* infobar_delegate_1 =
|
| - infobar_1->delegate()->AsConfirmInfoBarDelegate();
|
| - ASSERT_TRUE(infobar_delegate_1);
|
| - infobar_delegate_1->Cancel();
|
| - infobar_service_for_tab(0)->RemoveInfoBar(infobar_1);
|
| - EXPECT_EQ(1U, closed_infobar_tracker_.size());
|
| - EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_1));
|
| + // Because they're the same origin, this will cause tab A1's infobar to
|
| + // disappear. It does not cause the bubble to disappear: crbug.com/443013.
|
| + // TODO(felt): Update this test when the bubble's behavior is changed.
|
| + if (BubbleEnabled())
|
| + ASSERT_EQ(1U, GetBubblesQueueSize(manager_a1));
|
| + else
|
| + CheckPermissionMessageSentForTab(1, 0, true);
|
| +
|
| + // Either way, tab B should still have a pending permission request.
|
| + if (BubbleEnabled())
|
| + ASSERT_EQ(1U, GetBubblesQueueSize(manager_b));
|
| + else
|
| + ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count());
|
| }
|
|
|
| -TEST_F(GeolocationPermissionContextTests, QueuedOriginMultipleTabs) {
|
| +TEST_P(GeolocationPermissionContextParamTests, QueuedOriginMultipleTabs) {
|
| GURL url_a("http://www.example.com/geolocation");
|
| GURL url_b("http://www.example-2.com/geolocation");
|
| - NavigateAndCommit(url_a);
|
| - AddNewTab(url_a);
|
| -
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - RequestGeolocationPermission(web_contents(), RequestID(0), url_a);
|
| - ASSERT_EQ(1U, infobar_service()->infobar_count());
|
| + NavigateAndCommit(url_a); // Tab A0.
|
| + AddNewTab(url_a); // Tab A1.
|
| + if (BubbleEnabled()) {
|
| + BubbleManagerDocumentLoadCompleted();
|
| + BubbleManagerDocumentLoadCompleted(extra_tabs_[0]);
|
| + }
|
| + PermissionBubbleManager* manager_a0 =
|
| + PermissionBubbleManager::FromWebContents(web_contents());
|
| + PermissionBubbleManager* manager_a1 =
|
| + PermissionBubbleManager::FromWebContents(extra_tabs_[0]);
|
|
|
| - RequestGeolocationPermission(extra_tabs_[0], RequestIDForTab(0, 0), url_a);
|
| - EXPECT_EQ(1U, infobar_service_for_tab(0)->infobar_count());
|
| + // Request permission in both tabs; the extra tab will have two permission
|
| + // requests from two origins.
|
| + RequestGeolocationPermission(
|
| + web_contents(), RequestID(0), url_a, true);
|
| + RequestGeolocationPermission(
|
| + extra_tabs_[0], RequestIDForTab(0, 0), url_a, true);
|
| + RequestGeolocationPermission(
|
| + extra_tabs_[0], RequestIDForTab(0, 1), url_b, true);
|
| + if (BubbleEnabled()) {
|
| + ASSERT_EQ(1U, GetBubblesQueueSize(manager_a0));
|
| + ASSERT_EQ(1U, GetBubblesQueueSize(manager_a1));
|
| + } else {
|
| + ASSERT_EQ(1U, infobar_service()->infobar_count());
|
| + ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count());
|
| + }
|
|
|
| - RequestGeolocationPermission(extra_tabs_[0], RequestIDForTab(0, 1), url_b);
|
| - ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count());
|
| + // Accept the first request in tab A1.
|
| + if (BubbleEnabled()) {
|
| + AcceptBubble(manager_a1);
|
| + } else {
|
| + infobars::InfoBar* infobar_a1 = infobar_service_for_tab(0)->infobar_at(0);
|
| + ConfirmInfoBarDelegate* infobar_delegate_a1 =
|
| + infobar_a1->delegate()->AsConfirmInfoBarDelegate();
|
| + ASSERT_TRUE(infobar_delegate_a1);
|
| + infobar_delegate_a1->Accept();
|
| + infobar_service_for_tab(0)->RemoveInfoBar(infobar_a1);
|
| + EXPECT_EQ(2U, closed_infobar_tracker_.size());
|
| + EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_a1));
|
| + }
|
| + CheckPermissionMessageSentForTab(0, 0, true);
|
|
|
| - infobars::InfoBar* removed_infobar = infobar_service()->infobar_at(0);
|
| + // Because they're the same origin, this will cause tab A0's infobar to
|
| + // disappear. It does not cause the bubble to disappear: crbug.com/443013.
|
| + // TODO(felt): Update this test when the bubble's behavior is changed.
|
| + if (BubbleEnabled()) {
|
| + EXPECT_EQ(1U, GetBubblesQueueSize(manager_a0));
|
| + } else {
|
| + EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| + CheckPermissionMessageSent(0, true);
|
| + }
|
|
|
| - // Accept the second tab.
|
| - infobars::InfoBar* infobar_0 = infobar_service_for_tab(0)->infobar_at(0);
|
| - ConfirmInfoBarDelegate* infobar_delegate_0 =
|
| - infobar_0->delegate()->AsConfirmInfoBarDelegate();
|
| - ASSERT_TRUE(infobar_delegate_0);
|
| - infobar_delegate_0->Accept();
|
| - CheckPermissionMessageSentForTab(0, 0, true);
|
| - infobar_service_for_tab(0)->RemoveInfoBar(infobar_0);
|
| - EXPECT_EQ(2U, closed_infobar_tracker_.size());
|
| - EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_0));
|
| - // Now the infobar for the tab with the same origin should have gone.
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - CheckPermissionMessageSent(0, true);
|
| - EXPECT_TRUE(closed_infobar_tracker_.Contains(removed_infobar));
|
| - closed_infobar_tracker_.Clear();
|
| -
|
| - // And we should have the queued infobar displayed now.
|
| - ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count());
|
| -
|
| - // Accept the second infobar.
|
| - infobars::InfoBar* infobar_1 = infobar_service_for_tab(0)->infobar_at(0);
|
| - ConfirmInfoBarDelegate* infobar_delegate_1 =
|
| - infobar_1->delegate()->AsConfirmInfoBarDelegate();
|
| - ASSERT_TRUE(infobar_delegate_1);
|
| - infobar_delegate_1->Accept();
|
| - CheckPermissionMessageSentForTab(0, 1, true);
|
| - infobar_service_for_tab(0)->RemoveInfoBar(infobar_1);
|
| - EXPECT_EQ(1U, closed_infobar_tracker_.size());
|
| - EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_1));
|
| + // The second request should now be visible in tab A1.
|
| + if (BubbleEnabled())
|
| + ASSERT_EQ(1U, GetBubblesQueueSize(manager_a1));
|
| + else
|
| + ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count());
|
| +
|
| + // Accept the second request and check that it's gone.
|
| + if (BubbleEnabled()) {
|
| + AcceptBubble(manager_a1);
|
| + EXPECT_EQ(0U, GetBubblesQueueSize(manager_a1));
|
| + } else {
|
| + infobars::InfoBar* infobar_1 = infobar_service_for_tab(0)->infobar_at(0);
|
| + ConfirmInfoBarDelegate* infobar_delegate_1 =
|
| + infobar_1->delegate()->AsConfirmInfoBarDelegate();
|
| + ASSERT_TRUE(infobar_delegate_1);
|
| + infobar_delegate_1->Accept();
|
| + }
|
| }
|
|
|
| -TEST_F(GeolocationPermissionContextTests, TabDestroyed) {
|
| +TEST_P(GeolocationPermissionContextParamTests, TabDestroyed) {
|
| GURL requesting_frame_0("http://www.example.com/geolocation");
|
| GURL requesting_frame_1("http://www.example-2.com/geolocation");
|
| - EXPECT_EQ(CONTENT_SETTING_ASK,
|
| - profile()->GetHostContentSettingsMap()->GetContentSetting(
|
| - requesting_frame_0, requesting_frame_0,
|
| - CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
|
| -
|
| - EXPECT_EQ(CONTENT_SETTING_ASK,
|
| - profile()->GetHostContentSettingsMap()->GetContentSetting(
|
| - requesting_frame_1, requesting_frame_0,
|
| - CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
|
| + EXPECT_EQ(
|
| + CONTENT_SETTING_ASK,
|
| + GetGeolocationContentSetting(requesting_frame_0, requesting_frame_0));
|
| + EXPECT_EQ(
|
| + CONTENT_SETTING_ASK,
|
| + GetGeolocationContentSetting(requesting_frame_1, requesting_frame_0));
|
|
|
| NavigateAndCommit(requesting_frame_0);
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| + if (BubbleEnabled()) BubbleManagerDocumentLoadCompleted();
|
| +
|
| // Request permission for two frames.
|
| RequestGeolocationPermission(
|
| - web_contents(), RequestID(0), requesting_frame_0);
|
| + web_contents(), RequestID(0), requesting_frame_0, false);
|
| RequestGeolocationPermission(
|
| - web_contents(), RequestID(1), requesting_frame_1);
|
| - // Ensure only one infobar is created.
|
| - ASSERT_EQ(1U, infobar_service()->infobar_count());
|
| - infobars::InfoBar* infobar = infobar_service()->infobar_at(0);
|
| + web_contents(), RequestID(1), requesting_frame_1, false);
|
| +
|
| + // Ensure only one prompt is created.
|
| + ASSERT_EQ(1U, GetNumberOfPrompts());
|
|
|
| // Delete the tab contents.
|
| - DeleteContents();
|
| + if (!BubbleEnabled()) {
|
| + infobars::InfoBar* infobar = infobar_service()->infobar_at(0);
|
| + DeleteContents();
|
| + ASSERT_EQ(1U, closed_infobar_tracker_.size());
|
| + ASSERT_TRUE(closed_infobar_tracker_.Contains(infobar));
|
| + }
|
|
|
| - // During contents destruction, the infobar will have been closed, and the
|
| - // pending request should have been cleared without an infobar being created.
|
| - ASSERT_EQ(1U, closed_infobar_tracker_.size());
|
| - ASSERT_TRUE(closed_infobar_tracker_.Contains(infobar));
|
| + // The content settings should not have changed.
|
| + EXPECT_EQ(
|
| + CONTENT_SETTING_ASK,
|
| + GetGeolocationContentSetting(requesting_frame_0, requesting_frame_0));
|
| + EXPECT_EQ(
|
| + CONTENT_SETTING_ASK,
|
| + GetGeolocationContentSetting(requesting_frame_1, requesting_frame_0));
|
| }
|
|
|
| -TEST_F(GeolocationPermissionContextTests, LastUsageAudited) {
|
| +TEST_P(GeolocationPermissionContextParamTests, LastUsageAudited) {
|
| GURL requesting_frame("http://www.example.com/geolocation");
|
| NavigateAndCommit(requesting_frame);
|
| + if (BubbleEnabled()) BubbleManagerDocumentLoadCompleted();
|
|
|
| base::SimpleTestClock* test_clock = new base::SimpleTestClock;
|
| test_clock->SetNow(base::Time::UnixEpoch() +
|
| @@ -667,15 +857,12 @@ TEST_F(GeolocationPermissionContextTests, LastUsageAudited) {
|
| requesting_frame.GetOrigin(),
|
| CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
|
| 0);
|
| + ASSERT_EQ(0U, GetNumberOfPrompts());
|
| + RequestGeolocationPermission(
|
| + web_contents(), RequestID(0), requesting_frame, false);
|
| + ASSERT_EQ(1U, GetNumberOfPrompts());
|
|
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame);
|
| - ASSERT_EQ(1U, infobar_service()->infobar_count());
|
| - infobars::InfoBar* infobar = infobar_service()->infobar_at(0);
|
| - ConfirmInfoBarDelegate* infobar_delegate =
|
| - infobar->delegate()->AsConfirmInfoBarDelegate();
|
| - ASSERT_TRUE(infobar_delegate);
|
| - infobar_delegate->Accept();
|
| + AcceptPrompt();
|
| CheckTabContentsState(requesting_frame, CONTENT_SETTING_ALLOW);
|
| CheckPermissionMessageSent(0, true);
|
|
|
| @@ -686,7 +873,8 @@ TEST_F(GeolocationPermissionContextTests, LastUsageAudited) {
|
| 10);
|
|
|
| test_clock->Advance(base::TimeDelta::FromSeconds(3));
|
| - RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame);
|
| + RequestGeolocationPermission(
|
| + web_contents(), RequestID(0), requesting_frame, false);
|
|
|
| // Permission has been used three seconds later.
|
| EXPECT_EQ(map->GetLastUsage(requesting_frame.GetOrigin(),
|
| @@ -695,7 +883,7 @@ TEST_F(GeolocationPermissionContextTests, LastUsageAudited) {
|
| 13);
|
| }
|
|
|
| -TEST_F(GeolocationPermissionContextTests, LastUsageAuditedMultipleFrames) {
|
| +TEST_P(GeolocationPermissionContextParamTests, LastUsageAuditedMultipleFrames) {
|
| base::SimpleTestClock* test_clock = new base::SimpleTestClock;
|
| test_clock->SetNow(base::Time::UnixEpoch() +
|
| base::TimeDelta::FromSeconds(10));
|
| @@ -717,27 +905,27 @@ TEST_F(GeolocationPermissionContextTests, LastUsageAuditedMultipleFrames) {
|
| 0);
|
|
|
| NavigateAndCommit(requesting_frame_0);
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| + if (BubbleEnabled()) BubbleManagerDocumentLoadCompleted();
|
| +
|
| + EXPECT_EQ(0U, GetNumberOfPrompts());
|
|
|
| // Request permission for two frames.
|
| RequestGeolocationPermission(
|
| - web_contents(), RequestID(0), requesting_frame_0);
|
| + web_contents(), RequestID(0), requesting_frame_0, false);
|
| RequestGeolocationPermission(
|
| - web_contents(), RequestID(1), requesting_frame_1);
|
| + web_contents(), RequestID(1), requesting_frame_1, false);
|
|
|
| // Ensure only one infobar is created.
|
| - ASSERT_EQ(1U, infobar_service()->infobar_count());
|
| - infobars::InfoBar* infobar_0 = infobar_service()->infobar_at(0);
|
| - ConfirmInfoBarDelegate* infobar_delegate_0 =
|
| - infobar_0->delegate()->AsConfirmInfoBarDelegate();
|
| + ASSERT_EQ(1U, GetNumberOfPrompts());
|
|
|
| // Accept the first frame.
|
| - infobar_delegate_0->Accept();
|
| + AcceptPrompt();
|
| + if (!BubbleEnabled())
|
| + infobar_service()->RemoveInfoBar(infobar_service()->infobar_at(0));
|
| CheckTabContentsState(requesting_frame_0, CONTENT_SETTING_ALLOW);
|
| CheckPermissionMessageSent(0, true);
|
| - infobar_service()->RemoveInfoBar(infobar_0);
|
|
|
| - // Verify that accepting the first didn't accept because it's embedder
|
| + // Verify that accepting the first didn't accept because it's embedded
|
| // in the other.
|
| EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(),
|
| requesting_frame_0.GetOrigin(),
|
| @@ -748,18 +936,16 @@ TEST_F(GeolocationPermissionContextTests, LastUsageAuditedMultipleFrames) {
|
| CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
|
| 0);
|
|
|
| - ASSERT_EQ(1U, infobar_service()->infobar_count());
|
| - infobars::InfoBar* infobar_1 = infobar_service()->infobar_at(0);
|
| - ConfirmInfoBarDelegate* infobar_delegate_1 =
|
| - infobar_1->delegate()->AsConfirmInfoBarDelegate();
|
| + ASSERT_EQ(1U, GetNumberOfPrompts());
|
|
|
| test_clock->Advance(base::TimeDelta::FromSeconds(1));
|
|
|
| // Allow the second frame.
|
| - infobar_delegate_1->Accept();
|
| + AcceptPrompt();
|
| CheckTabContentsState(requesting_frame_1, CONTENT_SETTING_ALLOW);
|
| CheckPermissionMessageSent(1, true);
|
| - infobar_service()->RemoveInfoBar(infobar_1);
|
| + if (!BubbleEnabled())
|
| + infobar_service()->RemoveInfoBar(infobar_service()->infobar_at(0));
|
|
|
| // Verify that the times are different.
|
| EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(),
|
| @@ -773,7 +959,7 @@ TEST_F(GeolocationPermissionContextTests, LastUsageAuditedMultipleFrames) {
|
|
|
| test_clock->Advance(base::TimeDelta::FromSeconds(2));
|
| RequestGeolocationPermission(
|
| - web_contents(), RequestID(0), requesting_frame_0);
|
| + web_contents(), RequestID(0), requesting_frame_0, false);
|
|
|
| // Verify that requesting permission in one frame doesn't update other where
|
| // it is the embedder.
|
| @@ -786,3 +972,7 @@ TEST_F(GeolocationPermissionContextTests, LastUsageAuditedMultipleFrames) {
|
| CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(),
|
| 11);
|
| }
|
| +
|
| +INSTANTIATE_TEST_CASE_P(GeolocationPermissionContextTestsWithAndWithoutBubbles,
|
| + GeolocationPermissionContextParamTests,
|
| + ::testing::Values(false, true));
|
|
|