| Index: chrome/browser/geolocation/chrome_geolocation_permission_context_unittest.cc
|
| diff --git a/chrome/browser/geolocation/chrome_geolocation_permission_context_unittest.cc b/chrome/browser/geolocation/chrome_geolocation_permission_context_unittest.cc
|
| deleted file mode 100644
|
| index 57d805034673633385c45716dd8c7f4909169fb5..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/geolocation/chrome_geolocation_permission_context_unittest.cc
|
| +++ /dev/null
|
| @@ -1,697 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/geolocation/chrome_geolocation_permission_context.h"
|
| -
|
| -#include <set>
|
| -#include <string>
|
| -#include <utility>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/containers/hash_tables.h"
|
| -#include "base/memory/scoped_vector.h"
|
| -#include "base/run_loop.h"
|
| -#include "base/synchronization/waitable_event.h"
|
| -#include "chrome/browser/chrome_notification_types.h"
|
| -#include "chrome/browser/content_settings/host_content_settings_map.h"
|
| -#include "chrome/browser/content_settings/permission_request_id.h"
|
| -#include "chrome/browser/content_settings/tab_specific_content_settings.h"
|
| -#include "chrome/browser/geolocation/chrome_geolocation_permission_context_factory.h"
|
| -#include "chrome/browser/infobars/infobar_service.h"
|
| -#include "chrome/browser/infobars/infobar_service.h"
|
| -#include "chrome/test/base/chrome_render_view_host_test_harness.h"
|
| -#include "chrome/test/base/testing_profile.h"
|
| -#include "components/infobars/core/confirm_infobar_delegate.h"
|
| -#include "components/infobars/core/infobar.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| -#include "content/public/browser/navigation_details.h"
|
| -#include "content/public/browser/notification_registrar.h"
|
| -#include "content/public/browser/notification_service.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "content/public/test/mock_render_process_host.h"
|
| -#include "content/public/test/test_renderer_host.h"
|
| -#include "content/public/test/web_contents_tester.h"
|
| -#include "extensions/browser/view_type_utils.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -#if defined(OS_ANDROID)
|
| -#include "base/prefs/pref_service.h"
|
| -#include "chrome/browser/android/mock_google_location_settings_helper.h"
|
| -#include "chrome/common/pref_names.h"
|
| -#endif
|
| -
|
| -using content::MockRenderProcessHost;
|
| -
|
| -
|
| -// ClosedInfoBarTracker -------------------------------------------------------
|
| -
|
| -// We need to track which infobars were closed.
|
| -class ClosedInfoBarTracker : public content::NotificationObserver {
|
| - public:
|
| - ClosedInfoBarTracker();
|
| - virtual ~ClosedInfoBarTracker();
|
| -
|
| - // content::NotificationObserver:
|
| - virtual void Observe(int type,
|
| - const content::NotificationSource& source,
|
| - const content::NotificationDetails& details) OVERRIDE;
|
| -
|
| - size_t size() const { return removed_infobars_.size(); }
|
| -
|
| - bool Contains(infobars::InfoBar* infobar) const;
|
| - void Clear();
|
| -
|
| - private:
|
| - FRIEND_TEST_ALL_PREFIXES(GeolocationPermissionContextTests, TabDestroyed);
|
| - content::NotificationRegistrar registrar_;
|
| - std::set<infobars::InfoBar*> removed_infobars_;
|
| -};
|
| -
|
| -ClosedInfoBarTracker::ClosedInfoBarTracker() {
|
| - registrar_.Add(this, chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED,
|
| - content::NotificationService::AllSources());
|
| -}
|
| -
|
| -ClosedInfoBarTracker::~ClosedInfoBarTracker() {
|
| -}
|
| -
|
| -void ClosedInfoBarTracker::Observe(
|
| - int type,
|
| - const content::NotificationSource& source,
|
| - const content::NotificationDetails& details) {
|
| - DCHECK(type == chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED);
|
| - removed_infobars_.insert(
|
| - content::Details<infobars::InfoBar::RemovedDetails>(details)->first);
|
| -}
|
| -
|
| -bool ClosedInfoBarTracker::Contains(infobars::InfoBar* infobar) const {
|
| - return removed_infobars_.count(infobar) != 0;
|
| -}
|
| -
|
| -void ClosedInfoBarTracker::Clear() {
|
| - removed_infobars_.clear();
|
| -}
|
| -
|
| -
|
| -// GeolocationPermissionContextTests ------------------------------------------
|
| -
|
| -class GeolocationPermissionContextTests
|
| - : public ChromeRenderViewHostTestHarness {
|
| - protected:
|
| - // ChromeRenderViewHostTestHarness:
|
| - virtual void SetUp() OVERRIDE;
|
| - virtual void TearDown() OVERRIDE;
|
| -
|
| - PermissionRequestID RequestID(int bridge_id);
|
| - PermissionRequestID RequestIDForTab(int tab, int bridge_id);
|
| - InfoBarService* infobar_service() {
|
| - return InfoBarService::FromWebContents(web_contents());
|
| - }
|
| - InfoBarService* infobar_service_for_tab(int tab) {
|
| - return InfoBarService::FromWebContents(extra_tabs_[tab]);
|
| - }
|
| -
|
| - void RequestGeolocationPermission(content::WebContents* web_contents,
|
| - const PermissionRequestID& id,
|
| - const GURL& requesting_frame);
|
| - void CancelGeolocationPermissionRequest(content::WebContents* web_contents,
|
| - const PermissionRequestID& id,
|
| - const GURL& requesting_frame);
|
| - void PermissionResponse(const PermissionRequestID& id,
|
| - bool allowed);
|
| - void CheckPermissionMessageSent(int bridge_id, bool allowed);
|
| - void CheckPermissionMessageSentForTab(int tab, int bridge_id, bool allowed);
|
| - void CheckPermissionMessageSentInternal(MockRenderProcessHost* process,
|
| - int bridge_id,
|
| - bool allowed);
|
| - void AddNewTab(const GURL& url);
|
| - void CheckTabContentsState(const GURL& requesting_frame,
|
| - ContentSetting expected_content_setting);
|
| -
|
| - scoped_refptr<ChromeGeolocationPermissionContext>
|
| - geolocation_permission_context_;
|
| - ClosedInfoBarTracker closed_infobar_tracker_;
|
| - ScopedVector<content::WebContents> extra_tabs_;
|
| -
|
| - // A map between renderer child id and a pair represending the bridge id and
|
| - // whether the requested permission was allowed.
|
| - base::hash_map<int, std::pair<int, bool> > responses_;
|
| -};
|
| -
|
| -PermissionRequestID GeolocationPermissionContextTests::RequestID(
|
| - int bridge_id) {
|
| - return PermissionRequestID(
|
| - web_contents()->GetRenderProcessHost()->GetID(),
|
| - web_contents()->GetRenderViewHost()->GetRoutingID(),
|
| - bridge_id,
|
| - GURL());
|
| -}
|
| -
|
| -PermissionRequestID GeolocationPermissionContextTests::RequestIDForTab(
|
| - int tab,
|
| - int bridge_id) {
|
| - return PermissionRequestID(
|
| - extra_tabs_[tab]->GetRenderProcessHost()->GetID(),
|
| - extra_tabs_[tab]->GetRenderViewHost()->GetRoutingID(),
|
| - bridge_id,
|
| - GURL());
|
| -}
|
| -
|
| -void GeolocationPermissionContextTests::RequestGeolocationPermission(
|
| - content::WebContents* web_contents,
|
| - const PermissionRequestID& id,
|
| - const GURL& requesting_frame) {
|
| - geolocation_permission_context_->RequestGeolocationPermission(
|
| - web_contents, id.bridge_id(), requesting_frame, false,
|
| - base::Bind(&GeolocationPermissionContextTests::PermissionResponse,
|
| - base::Unretained(this), id));
|
| - content::BrowserThread::GetBlockingPool()->FlushForTesting();
|
| - base::RunLoop().RunUntilIdle();
|
| -}
|
| -
|
| -void GeolocationPermissionContextTests::CancelGeolocationPermissionRequest(
|
| - content::WebContents* web_contents,
|
| - const PermissionRequestID& id,
|
| - const GURL& requesting_frame) {
|
| - geolocation_permission_context_->CancelGeolocationPermissionRequest(
|
| - web_contents, id.bridge_id(), requesting_frame);
|
| -}
|
| -
|
| -void GeolocationPermissionContextTests::PermissionResponse(
|
| - const PermissionRequestID& id,
|
| - bool allowed) {
|
| - responses_[id.render_process_id()] = std::make_pair(id.bridge_id(), allowed);
|
| -}
|
| -
|
| -void GeolocationPermissionContextTests::CheckPermissionMessageSent(
|
| - int bridge_id,
|
| - bool allowed) {
|
| - CheckPermissionMessageSentInternal(process(), bridge_id, allowed);
|
| -}
|
| -
|
| -void GeolocationPermissionContextTests::CheckPermissionMessageSentForTab(
|
| - int tab,
|
| - int bridge_id,
|
| - bool allowed) {
|
| - CheckPermissionMessageSentInternal(static_cast<MockRenderProcessHost*>(
|
| - extra_tabs_[tab]->GetRenderProcessHost()),
|
| - bridge_id, allowed);
|
| -}
|
| -
|
| -void GeolocationPermissionContextTests::CheckPermissionMessageSentInternal(
|
| - MockRenderProcessHost* process,
|
| - int bridge_id,
|
| - bool allowed) {
|
| - ASSERT_EQ(responses_.count(process->GetID()), 1U);
|
| - EXPECT_EQ(bridge_id, responses_[process->GetID()].first);
|
| - EXPECT_EQ(allowed, responses_[process->GetID()].second);
|
| - responses_.erase(process->GetID());
|
| -}
|
| -
|
| -void GeolocationPermissionContextTests::AddNewTab(const GURL& url) {
|
| - content::WebContents* new_tab = content::WebContents::Create(
|
| - content::WebContents::CreateParams(profile()));
|
| - new_tab->GetController().LoadURL(
|
| - url, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
|
| - content::RenderViewHostTester::For(new_tab->GetRenderViewHost())->
|
| - SendNavigate(extra_tabs_.size() + 1, url);
|
| -
|
| - // Set up required helpers, and make this be as "tabby" as the code requires.
|
| - extensions::SetViewType(new_tab, extensions::VIEW_TYPE_TAB_CONTENTS);
|
| - InfoBarService::CreateForWebContents(new_tab);
|
| -
|
| - extra_tabs_.push_back(new_tab);
|
| -}
|
| -
|
| -void GeolocationPermissionContextTests::CheckTabContentsState(
|
| - const GURL& requesting_frame,
|
| - ContentSetting expected_content_setting) {
|
| - TabSpecificContentSettings* content_settings =
|
| - TabSpecificContentSettings::FromWebContents(web_contents());
|
| - const ContentSettingsUsagesState::StateMap& state_map =
|
| - content_settings->geolocation_usages_state().state_map();
|
| - EXPECT_EQ(1U, state_map.count(requesting_frame.GetOrigin()));
|
| - EXPECT_EQ(0U, state_map.count(requesting_frame));
|
| - ContentSettingsUsagesState::StateMap::const_iterator settings =
|
| - state_map.find(requesting_frame.GetOrigin());
|
| - ASSERT_FALSE(settings == state_map.end())
|
| - << "geolocation state not found " << requesting_frame;
|
| - EXPECT_EQ(expected_content_setting, settings->second);
|
| -}
|
| -
|
| -void GeolocationPermissionContextTests::SetUp() {
|
| - ChromeRenderViewHostTestHarness::SetUp();
|
| -
|
| - // Set up required helpers, and make this be as "tabby" as the code requires.
|
| - extensions::SetViewType(web_contents(), extensions::VIEW_TYPE_TAB_CONTENTS);
|
| - InfoBarService::CreateForWebContents(web_contents());
|
| - TabSpecificContentSettings::CreateForWebContents(web_contents());
|
| -#if defined(OS_ANDROID)
|
| - MockGoogleLocationSettingsHelper::SetLocationStatus(true, true);
|
| -#endif
|
| - geolocation_permission_context_ =
|
| - ChromeGeolocationPermissionContextFactory::GetForProfile(profile());
|
| -}
|
| -
|
| -void GeolocationPermissionContextTests::TearDown() {
|
| - extra_tabs_.clear();
|
| - ChromeRenderViewHostTestHarness::TearDown();
|
| -}
|
| -
|
| -// Tests ----------------------------------------------------------------------
|
| -
|
| -TEST_F(GeolocationPermissionContextTests, SinglePermission) {
|
| - 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);
|
| - 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->Cancel();
|
| - infobar_service()->RemoveInfoBar(infobar);
|
| - EXPECT_EQ(1U, closed_infobar_tracker_.size());
|
| - EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar));
|
| -}
|
| -
|
| -#if defined(OS_ANDROID)
|
| -TEST_F(GeolocationPermissionContextTests, GeolocationEnabledDisabled) {
|
| - GURL requesting_frame("http://www.example.com/geolocation");
|
| - NavigateAndCommit(requesting_frame);
|
| - MockGoogleLocationSettingsHelper::SetLocationStatus(true, true);
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame);
|
| - EXPECT_EQ(1U, infobar_service()->infobar_count());
|
| - ConfirmInfoBarDelegate* infobar_delegate_0 =
|
| - infobar_service()->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate();
|
| - ASSERT_TRUE(infobar_delegate_0);
|
| - base::string16 text_0 = infobar_delegate_0->GetButtonLabel(
|
| - ConfirmInfoBarDelegate::BUTTON_OK);
|
| -
|
| - Reload();
|
| - MockGoogleLocationSettingsHelper::SetLocationStatus(true, false);
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame);
|
| - EXPECT_EQ(1U, infobar_service()->infobar_count());
|
| - ConfirmInfoBarDelegate* infobar_delegate_1 =
|
| - infobar_service()->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate();
|
| - ASSERT_TRUE(infobar_delegate_1);
|
| - base::string16 text_1 = infobar_delegate_1->GetButtonLabel(
|
| - ConfirmInfoBarDelegate::BUTTON_OK);
|
| - EXPECT_NE(text_0, text_1);
|
| -
|
| - Reload();
|
| - MockGoogleLocationSettingsHelper::SetLocationStatus(false, false);
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame);
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| -}
|
| -
|
| -TEST_F(GeolocationPermissionContextTests, MasterEnabledGoogleAppsEnabled) {
|
| - GURL requesting_frame("http://www.example.com/geolocation");
|
| - NavigateAndCommit(requesting_frame);
|
| - MockGoogleLocationSettingsHelper::SetLocationStatus(true, true);
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame);
|
| - EXPECT_EQ(1U, infobar_service()->infobar_count());
|
| - ConfirmInfoBarDelegate* infobar_delegate =
|
| - infobar_service()->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate();
|
| - ASSERT_TRUE(infobar_delegate);
|
| - infobar_delegate->Accept();
|
| - CheckTabContentsState(requesting_frame, CONTENT_SETTING_ALLOW);
|
| - CheckPermissionMessageSent(0, true);
|
| -}
|
| -
|
| -TEST_F(GeolocationPermissionContextTests, MasterEnabledGoogleAppsDisabled) {
|
| - GURL requesting_frame("http://www.example.com/geolocation");
|
| - NavigateAndCommit(requesting_frame);
|
| - MockGoogleLocationSettingsHelper::SetLocationStatus(true, false);
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame);
|
| - EXPECT_EQ(1U, infobar_service()->infobar_count());
|
| - ConfirmInfoBarDelegate* infobar_delegate =
|
| - infobar_service()->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate();
|
| - ASSERT_TRUE(infobar_delegate);
|
| - infobar_delegate->Accept();
|
| - EXPECT_TRUE(
|
| - MockGoogleLocationSettingsHelper::WasGoogleLocationSettingsCalled());
|
| -}
|
| -#endif
|
| -
|
| -TEST_F(GeolocationPermissionContextTests, 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()));
|
| -
|
| - NavigateAndCommit(requesting_frame_0);
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - // Request permission for two frames.
|
| - RequestGeolocationPermission(
|
| - web_contents(), RequestID(0), requesting_frame_0);
|
| - RequestGeolocationPermission(
|
| - web_contents(), RequestID(1), requesting_frame_1);
|
| - // 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();
|
| -
|
| - // Accept the first frame.
|
| - infobar_delegate_0->Accept();
|
| - 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();
|
| - // Now we should have a new infobar for the second frame.
|
| - 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_TRUE(infobar_delegate_1);
|
| - base::string16 text_1 = infobar_delegate_1->GetMessageText();
|
| - EXPECT_NE(text_0, text_1);
|
| -
|
| - // Cancel (block) this frame.
|
| - infobar_delegate_1->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()));
|
| -}
|
| -
|
| -TEST_F(GeolocationPermissionContextTests, 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.
|
| - 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);
|
| -
|
| - // Change the hash, we'll still be on the same page.
|
| - NavigateAndCommit(url_b);
|
| -
|
| - // Accept.
|
| - infobar_delegate->Accept();
|
| - 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));
|
| -}
|
| -
|
| -TEST_F(GeolocationPermissionContextTests, PermissionForFileScheme) {
|
| - 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);
|
| - // Accept the frame.
|
| - infobar_delegate->Accept();
|
| - 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()));
|
| -}
|
| -
|
| -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()));
|
| -
|
| - EXPECT_EQ(CONTENT_SETTING_ASK,
|
| - profile()->GetHostContentSettingsMap()->GetContentSetting(
|
| - requesting_frame_1, requesting_frame_0,
|
| - CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string()));
|
| -
|
| - NavigateAndCommit(requesting_frame_0);
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - // Request permission for two frames.
|
| - RequestGeolocationPermission(
|
| - web_contents(), RequestID(0), requesting_frame_0);
|
| - 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.
|
| - CancelGeolocationPermissionRequest(
|
| - web_contents(), RequestID(0), requesting_frame_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());
|
| -
|
| - 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();
|
| - EXPECT_NE(text_0, text_1);
|
| -
|
| - // Allow this frame.
|
| - infobar_delegate_1->Accept();
|
| - CheckTabContentsState(requesting_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()));
|
| -}
|
| -
|
| -TEST_F(GeolocationPermissionContextTests, InvalidURL) {
|
| - 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());
|
| - CheckPermissionMessageSent(0, false);
|
| -}
|
| -
|
| -TEST_F(GeolocationPermissionContextTests, 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);
|
| -
|
| - // 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();
|
| - 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));
|
| -}
|
| -
|
| -TEST_F(GeolocationPermissionContextTests, 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());
|
| -
|
| - RequestGeolocationPermission(extra_tabs_[0], RequestIDForTab(0, 0), url_a);
|
| - EXPECT_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());
|
| -
|
| - infobars::InfoBar* removed_infobar = infobar_service()->infobar_at(0);
|
| -
|
| - // 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));
|
| -}
|
| -
|
| -TEST_F(GeolocationPermissionContextTests, 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()));
|
| -
|
| - NavigateAndCommit(requesting_frame_0);
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - // Request permission for two frames.
|
| - RequestGeolocationPermission(
|
| - web_contents(), RequestID(0), requesting_frame_0);
|
| - 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);
|
| -
|
| - // Delete the tab contents.
|
| - DeleteContents();
|
| -
|
| - // 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));
|
| -}
|
| -
|
| -TEST_F(GeolocationPermissionContextTests, InfoBarUsesCommittedEntry) {
|
| - GURL requesting_frame_0("http://www.example.com/geolocation");
|
| - GURL requesting_frame_1("http://www.example-2.com/geolocation");
|
| - NavigateAndCommit(requesting_frame_0);
|
| - NavigateAndCommit(requesting_frame_1);
|
| - EXPECT_EQ(0U, infobar_service()->infobar_count());
|
| - // Go back: navigate to a pending entry before requesting geolocation
|
| - // permission.
|
| - web_contents()->GetController().GoBack();
|
| - // Request permission for the committed frame (not the pending one).
|
| - RequestGeolocationPermission(
|
| - web_contents(), RequestID(0), requesting_frame_1);
|
| - // Ensure the infobar is created.
|
| - ASSERT_EQ(1U, infobar_service()->infobar_count());
|
| - infobars::InfoBarDelegate* infobar_delegate =
|
| - infobar_service()->infobar_at(0)->delegate();
|
| - ASSERT_TRUE(infobar_delegate);
|
| - // Ensure the infobar wouldn't expire for a navigation to the committed entry.
|
| - content::LoadCommittedDetails details;
|
| - details.entry = web_contents()->GetController().GetLastCommittedEntry();
|
| - EXPECT_FALSE(infobar_delegate->ShouldExpire(
|
| - InfoBarService::NavigationDetailsFromLoadCommittedDetails(details)));
|
| - // Ensure the infobar will expire when we commit the pending navigation.
|
| - details.entry = web_contents()->GetController().GetActiveEntry();
|
| - EXPECT_TRUE(infobar_delegate->ShouldExpire(
|
| - InfoBarService::NavigationDetailsFromLoadCommittedDetails(details)));
|
| -
|
| - // Delete the tab contents.
|
| - DeleteContents();
|
| -}
|
|
|