| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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> |
| 8 |
| 7 #include "base/scoped_vector.h" | 9 #include "base/scoped_vector.h" |
| 8 #include "chrome/browser/browser_thread.h" | 10 #include "chrome/browser/browser_thread.h" |
| 9 #include "chrome/browser/geolocation/geolocation_content_settings_map.h" | 11 #include "chrome/browser/geolocation/geolocation_content_settings_map.h" |
| 10 #include "chrome/browser/geolocation/geolocation_permission_context.h" | 12 #include "chrome/browser/geolocation/geolocation_permission_context.h" |
| 11 #include "chrome/browser/geolocation/location_arbitrator.h" | 13 #include "chrome/browser/geolocation/location_arbitrator.h" |
| 12 #include "chrome/browser/geolocation/location_provider.h" | 14 #include "chrome/browser/geolocation/location_provider.h" |
| 13 #include "chrome/browser/geolocation/mock_location_provider.h" | 15 #include "chrome/browser/geolocation/mock_location_provider.h" |
| 14 #include "chrome/browser/renderer_host/mock_render_process_host.h" | 16 #include "chrome/browser/renderer_host/mock_render_process_host.h" |
| 15 #include "chrome/browser/renderer_host/test/test_render_view_host.h" | 17 #include "chrome/browser/renderer_host/test/test_render_view_host.h" |
| 16 #include "chrome/browser/tab_contents/infobar_delegate.h" | 18 #include "chrome/browser/tab_contents/infobar_delegate.h" |
| 17 #include "chrome/browser/tab_contents/test_tab_contents.h" | 19 #include "chrome/browser/tab_contents/test_tab_contents.h" |
| 18 #include "chrome/common/notification_details.h" | 20 #include "chrome/common/notification_registrar.h" |
| 19 #include "chrome/common/notification_type.h" | 21 #include "chrome/common/notification_service.h" |
| 20 #include "chrome/common/render_messages.h" | 22 #include "chrome/common/render_messages.h" |
| 21 #include "chrome/test/testing_profile.h" | 23 #include "chrome/test/testing_profile.h" |
| 22 #include "testing/gtest/include/gtest/gtest.h" | 24 #include "testing/gtest/include/gtest/gtest.h" |
| 23 | 25 |
| 24 // TestTabContents short-circuits TAB_CONTENTS_INFOBAR_REMOVED to call | 26 // We need to track which infobars were closed. |
| 25 // InfoBarClosed() directly. We need to observe it and call InfoBarClosed() | 27 class ClosedDelegateTracker : public NotificationObserver { |
| 26 // later. | |
| 27 class TestTabContentsWithPendingInfoBar : public TestTabContents { | |
| 28 public: | 28 public: |
| 29 TestTabContentsWithPendingInfoBar(Profile* profile, SiteInstance* instance) | 29 ClosedDelegateTracker() { |
| 30 : TestTabContents(profile, instance), | 30 registrar_.Add(this, NotificationType::TAB_CONTENTS_INFOBAR_REMOVED, |
| 31 removed_infobar_delegate_(NULL) { | 31 NotificationService::AllSources()); |
| 32 } | 32 } |
| 33 | 33 |
| 34 void Observe(NotificationType type, | 34 virtual void Observe(NotificationType type, |
| 35 const NotificationSource& source, | 35 const NotificationSource& source, |
| 36 const NotificationDetails& details) { | 36 const NotificationDetails& details) { |
| 37 // We need to special case TAB_CONTENTS_INFOBAR_REMOVED to track which | 37 DCHECK(type.value == NotificationType::TAB_CONTENTS_INFOBAR_REMOVED); |
| 38 // delegate was removed and avoid calling InfoBarClosed() supplied in the | 38 removed_infobar_delegates_.insert(Details<InfoBarDelegate>(details).ptr()); |
| 39 // base class. All other notification types are delegated to the base class. | |
| 40 switch (type.value) { | |
| 41 case NotificationType::TAB_CONTENTS_INFOBAR_REMOVED: | |
| 42 removed_infobar_delegate_ = Details<InfoBarDelegate>(details).ptr(); | |
| 43 break; | |
| 44 default: | |
| 45 TestTabContents::Observe(type, source, details); | |
| 46 break; | |
| 47 } | |
| 48 } | 39 } |
| 49 | 40 |
| 50 InfoBarDelegate* removed_infobar_delegate_; | 41 bool Contains(InfoBarDelegate* delegate) const { |
| 42 return removed_infobar_delegates_.count(delegate) != 0; |
| 43 } |
| 44 |
| 45 size_t size() const { |
| 46 return removed_infobar_delegates_.size(); |
| 47 } |
| 48 |
| 49 void Clear() { |
| 50 removed_infobar_delegates_.clear(); |
| 51 } |
| 52 |
| 53 private: |
| 54 NotificationRegistrar registrar_; |
| 55 std::set<InfoBarDelegate*> removed_infobar_delegates_; |
| 51 }; | 56 }; |
| 52 | 57 |
| 53 // This class sets up GeolocationArbitrator and injects | 58 // This class sets up GeolocationArbitrator. |
| 54 // TestTabContentsWithPendingInfoBar. | |
| 55 class GeolocationPermissionContextTests : public RenderViewHostTestHarness { | 59 class GeolocationPermissionContextTests : public RenderViewHostTestHarness { |
| 56 public: | 60 public: |
| 57 GeolocationPermissionContextTests() | 61 GeolocationPermissionContextTests() |
| 58 : RenderViewHostTestHarness(), | 62 : RenderViewHostTestHarness(), |
| 59 ui_thread_(BrowserThread::UI, MessageLoop::current()), | 63 ui_thread_(BrowserThread::UI, MessageLoop::current()) { |
| 60 tab_contents_with_pending_infobar_(NULL) { | |
| 61 } | 64 } |
| 62 | 65 |
| 63 virtual ~GeolocationPermissionContextTests() { | 66 virtual ~GeolocationPermissionContextTests() { |
| 64 } | 67 } |
| 65 | 68 |
| 66 virtual void SetUp() { | 69 virtual void SetUp() { |
| 67 RenderViewHostTestHarness::SetUp(); | 70 RenderViewHostTestHarness::SetUp(); |
| 68 GeolocationArbitrator::SetProviderFactoryForTest( | 71 GeolocationArbitrator::SetProviderFactoryForTest( |
| 69 &NewAutoSuccessMockNetworkLocationProvider); | 72 &NewAutoSuccessMockNetworkLocationProvider); |
| 70 SiteInstance* site_instance = contents_->GetSiteInstance(); | |
| 71 tab_contents_with_pending_infobar_ = | |
| 72 new TestTabContentsWithPendingInfoBar(profile_.get(), site_instance); | |
| 73 contents_.reset(tab_contents_with_pending_infobar_); | |
| 74 geolocation_permission_context_ = | 73 geolocation_permission_context_ = |
| 75 new GeolocationPermissionContext(profile()); | 74 new GeolocationPermissionContext(profile()); |
| 75 closed_delegate_tracker_.reset(new ClosedDelegateTracker()); |
| 76 } | 76 } |
| 77 | 77 |
| 78 virtual void TearDown() { | 78 virtual void TearDown() { |
| 79 closed_delegate_tracker_.reset(); |
| 80 GeolocationArbitrator::SetProviderFactoryForTest(NULL); |
| 79 RenderViewHostTestHarness::TearDown(); | 81 RenderViewHostTestHarness::TearDown(); |
| 80 GeolocationArbitrator::SetProviderFactoryForTest(NULL); | |
| 81 } | 82 } |
| 82 | 83 |
| 83 int process_id() { | 84 int process_id() { |
| 84 return contents()->render_view_host()->process()->id(); | 85 return contents()->render_view_host()->process()->id(); |
| 85 } | 86 } |
| 86 int process_id_for_tab(int tab) { | 87 int process_id_for_tab(int tab) { |
| 87 return extra_tabs_[tab]->render_view_host()->process()->id(); | 88 return extra_tabs_[tab]->render_view_host()->process()->id(); |
| 88 } | 89 } |
| 89 | 90 |
| 90 int render_id() { | 91 int render_id() { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 119 ViewMsg_Geolocation_PermissionSet::ID); | 120 ViewMsg_Geolocation_PermissionSet::ID); |
| 120 ASSERT_TRUE(message); | 121 ASSERT_TRUE(message); |
| 121 ViewMsg_Geolocation_PermissionSet::Param param; | 122 ViewMsg_Geolocation_PermissionSet::Param param; |
| 122 ViewMsg_Geolocation_PermissionSet::Read(message, ¶m); | 123 ViewMsg_Geolocation_PermissionSet::Read(message, ¶m); |
| 123 EXPECT_EQ(bridge_id, param.a); | 124 EXPECT_EQ(bridge_id, param.a); |
| 124 EXPECT_EQ(allowed, param.b); | 125 EXPECT_EQ(allowed, param.b); |
| 125 process->sink().ClearMessages(); | 126 process->sink().ClearMessages(); |
| 126 } | 127 } |
| 127 | 128 |
| 128 void AddNewTab(const GURL& url) { | 129 void AddNewTab(const GURL& url) { |
| 129 TestTabContentsWithPendingInfoBar* new_tab = | 130 TabContents* new_tab = |
| 130 new TestTabContentsWithPendingInfoBar(profile(), NULL); | 131 new TabContents(profile(), NULL, MSG_ROUTING_NONE, NULL, NULL); |
| 131 new_tab->controller().LoadURL(url, GURL(), PageTransition::TYPED); | 132 new_tab->controller().LoadURL(url, GURL(), PageTransition::TYPED); |
| 132 static_cast<TestRenderViewHost*>(new_tab->render_manager()-> | 133 static_cast<TestRenderViewHost*>(new_tab->render_manager()-> |
| 133 current_host())->SendNavigate(extra_tabs_.size() + 1, url); | 134 current_host())->SendNavigate(extra_tabs_.size() + 1, url); |
| 134 extra_tabs_.push_back(new_tab); | 135 extra_tabs_.push_back(new_tab); |
| 135 } | 136 } |
| 136 | 137 |
| 137 void CheckTabContentsState(const GURL& requesting_frame, | 138 void CheckTabContentsState(const GURL& requesting_frame, |
| 138 ContentSetting expected_content_setting) { | 139 ContentSetting expected_content_setting) { |
| 139 TabSpecificContentSettings* content_settings = | 140 TabSpecificContentSettings* content_settings = |
| 140 contents()->GetTabSpecificContentSettings(); | 141 contents()->GetTabSpecificContentSettings(); |
| 141 const GeolocationSettingsState::StateMap& state_map = | 142 const GeolocationSettingsState::StateMap& state_map = |
| 142 content_settings->geolocation_settings_state().state_map(); | 143 content_settings->geolocation_settings_state().state_map(); |
| 143 EXPECT_EQ(1U, state_map.count(requesting_frame.GetOrigin())); | 144 EXPECT_EQ(1U, state_map.count(requesting_frame.GetOrigin())); |
| 144 EXPECT_EQ(0U, state_map.count(requesting_frame)); | 145 EXPECT_EQ(0U, state_map.count(requesting_frame)); |
| 145 GeolocationSettingsState::StateMap::const_iterator settings = | 146 GeolocationSettingsState::StateMap::const_iterator settings = |
| 146 state_map.find(requesting_frame.GetOrigin()); | 147 state_map.find(requesting_frame.GetOrigin()); |
| 147 ASSERT_FALSE(settings == state_map.end()) | 148 ASSERT_FALSE(settings == state_map.end()) |
| 148 << "geolocation state not found " << requesting_frame; | 149 << "geolocation state not found " << requesting_frame; |
| 149 EXPECT_EQ(expected_content_setting, settings->second); | 150 EXPECT_EQ(expected_content_setting, settings->second); |
| 150 } | 151 } |
| 151 | 152 |
| 152 protected: | 153 protected: |
| 153 BrowserThread ui_thread_; | 154 BrowserThread ui_thread_; |
| 154 TestTabContentsWithPendingInfoBar* tab_contents_with_pending_infobar_; | |
| 155 scoped_refptr<GeolocationPermissionContext> geolocation_permission_context_; | 155 scoped_refptr<GeolocationPermissionContext> geolocation_permission_context_; |
| 156 ScopedVector<TestTabContentsWithPendingInfoBar> extra_tabs_; | 156 scoped_ptr<ClosedDelegateTracker> closed_delegate_tracker_; |
| 157 ScopedVector<TabContents> extra_tabs_; |
| 157 }; | 158 }; |
| 158 | 159 |
| 159 TEST_F(GeolocationPermissionContextTests, SinglePermission) { | 160 TEST_F(GeolocationPermissionContextTests, SinglePermission) { |
| 160 GURL requesting_frame("http://www.example.com/geolocation"); | 161 GURL requesting_frame("http://www.example.com/geolocation"); |
| 161 NavigateAndCommit(requesting_frame); | 162 NavigateAndCommit(requesting_frame); |
| 162 EXPECT_EQ(0, contents()->infobar_delegate_count()); | 163 EXPECT_EQ(0, contents()->infobar_delegate_count()); |
| 163 geolocation_permission_context_->RequestGeolocationPermission( | 164 geolocation_permission_context_->RequestGeolocationPermission( |
| 164 process_id(), render_id(), bridge_id(), requesting_frame); | 165 process_id(), render_id(), bridge_id(), requesting_frame); |
| 165 EXPECT_EQ(1, contents()->infobar_delegate_count()); | 166 EXPECT_EQ(1, contents()->infobar_delegate_count()); |
| 166 } | 167 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 190 contents()->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); | 191 contents()->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); |
| 191 ASSERT_TRUE(infobar_0); | 192 ASSERT_TRUE(infobar_0); |
| 192 string16 text_0 = infobar_0->GetMessageText(); | 193 string16 text_0 = infobar_0->GetMessageText(); |
| 193 | 194 |
| 194 // Accept the first frame. | 195 // Accept the first frame. |
| 195 infobar_0->Accept(); | 196 infobar_0->Accept(); |
| 196 CheckTabContentsState(requesting_frame_0, CONTENT_SETTING_ALLOW); | 197 CheckTabContentsState(requesting_frame_0, CONTENT_SETTING_ALLOW); |
| 197 CheckPermissionMessageSent(bridge_id(), true); | 198 CheckPermissionMessageSent(bridge_id(), true); |
| 198 | 199 |
| 199 contents()->RemoveInfoBar(infobar_0); | 200 contents()->RemoveInfoBar(infobar_0); |
| 200 EXPECT_EQ(infobar_0, | 201 EXPECT_EQ(1U, closed_delegate_tracker_->size()); |
| 201 tab_contents_with_pending_infobar_->removed_infobar_delegate_); | 202 EXPECT_TRUE(closed_delegate_tracker_->Contains(infobar_0)); |
| 202 infobar_0->InfoBarClosed(); | 203 closed_delegate_tracker_->Clear(); |
| 203 // Now we should have a new infobar for the second frame. | 204 // Now we should have a new infobar for the second frame. |
| 204 EXPECT_EQ(1, contents()->infobar_delegate_count()); | 205 EXPECT_EQ(1, contents()->infobar_delegate_count()); |
| 205 | 206 |
| 206 ConfirmInfoBarDelegate* infobar_1 = | 207 ConfirmInfoBarDelegate* infobar_1 = |
| 207 contents()->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); | 208 contents()->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); |
| 208 ASSERT_TRUE(infobar_1); | 209 ASSERT_TRUE(infobar_1); |
| 209 string16 text_1 = infobar_1->GetMessageText(); | 210 string16 text_1 = infobar_1->GetMessageText(); |
| 210 EXPECT_NE(text_0, text_1); | 211 EXPECT_NE(text_0, text_1); |
| 211 | 212 |
| 212 // Cancel (block) this frame. | 213 // Cancel (block) this frame. |
| 213 infobar_1->Cancel(); | 214 infobar_1->Cancel(); |
| 214 CheckTabContentsState(requesting_frame_1, CONTENT_SETTING_BLOCK); | 215 CheckTabContentsState(requesting_frame_1, CONTENT_SETTING_BLOCK); |
| 215 CheckPermissionMessageSent(bridge_id() + 1, false); | 216 CheckPermissionMessageSent(bridge_id() + 1, false); |
| 216 contents()->RemoveInfoBar(infobar_1); | 217 contents()->RemoveInfoBar(infobar_1); |
| 217 EXPECT_EQ(infobar_1, | 218 EXPECT_EQ(1U, closed_delegate_tracker_->size()); |
| 218 tab_contents_with_pending_infobar_->removed_infobar_delegate_); | 219 EXPECT_TRUE(closed_delegate_tracker_->Contains(infobar_1)); |
| 219 infobar_1->InfoBarClosed(); | |
| 220 EXPECT_EQ(0, contents()->infobar_delegate_count()); | 220 EXPECT_EQ(0, contents()->infobar_delegate_count()); |
| 221 // Ensure the persisted permissions are ok. | 221 // Ensure the persisted permissions are ok. |
| 222 EXPECT_EQ( | 222 EXPECT_EQ( |
| 223 CONTENT_SETTING_ALLOW, | 223 CONTENT_SETTING_ALLOW, |
| 224 profile()->GetGeolocationContentSettingsMap()->GetContentSetting( | 224 profile()->GetGeolocationContentSettingsMap()->GetContentSetting( |
| 225 requesting_frame_0, requesting_frame_0)); | 225 requesting_frame_0, requesting_frame_0)); |
| 226 EXPECT_EQ( | 226 EXPECT_EQ( |
| 227 CONTENT_SETTING_BLOCK, | 227 CONTENT_SETTING_BLOCK, |
| 228 profile()->GetGeolocationContentSettingsMap()->GetContentSetting( | 228 profile()->GetGeolocationContentSettingsMap()->GetContentSetting( |
| 229 requesting_frame_1, requesting_frame_0)); | 229 requesting_frame_1, requesting_frame_0)); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 252 | 252 |
| 253 ConfirmInfoBarDelegate* infobar_0 = | 253 ConfirmInfoBarDelegate* infobar_0 = |
| 254 contents()->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); | 254 contents()->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); |
| 255 ASSERT_TRUE(infobar_0); | 255 ASSERT_TRUE(infobar_0); |
| 256 string16 text_0 = infobar_0->GetMessageText(); | 256 string16 text_0 = infobar_0->GetMessageText(); |
| 257 | 257 |
| 258 // Simulate the frame going away, ensure the infobar for this frame | 258 // Simulate the frame going away, ensure the infobar for this frame |
| 259 // is removed and the next pending infobar is created. | 259 // is removed and the next pending infobar is created. |
| 260 geolocation_permission_context_->CancelGeolocationPermissionRequest( | 260 geolocation_permission_context_->CancelGeolocationPermissionRequest( |
| 261 process_id(), render_id(), bridge_id(), requesting_frame_0); | 261 process_id(), render_id(), bridge_id(), requesting_frame_0); |
| 262 EXPECT_EQ(infobar_0, | 262 EXPECT_EQ(1U, closed_delegate_tracker_->size()); |
| 263 tab_contents_with_pending_infobar_->removed_infobar_delegate_); | 263 EXPECT_TRUE(closed_delegate_tracker_->Contains(infobar_0)); |
| 264 infobar_0->InfoBarClosed(); | 264 closed_delegate_tracker_->Clear(); |
| 265 EXPECT_EQ(1, contents()->infobar_delegate_count()); | 265 EXPECT_EQ(1, contents()->infobar_delegate_count()); |
| 266 | 266 |
| 267 ConfirmInfoBarDelegate* infobar_1 = | 267 ConfirmInfoBarDelegate* infobar_1 = |
| 268 contents()->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); | 268 contents()->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); |
| 269 ASSERT_TRUE(infobar_1); | 269 ASSERT_TRUE(infobar_1); |
| 270 string16 text_1 = infobar_1->GetMessageText(); | 270 string16 text_1 = infobar_1->GetMessageText(); |
| 271 EXPECT_NE(text_0, text_1); | 271 EXPECT_NE(text_0, text_1); |
| 272 | 272 |
| 273 // Allow this frame. | 273 // Allow this frame. |
| 274 infobar_1->Accept(); | 274 infobar_1->Accept(); |
| 275 CheckTabContentsState(requesting_frame_1, CONTENT_SETTING_ALLOW); | 275 CheckTabContentsState(requesting_frame_1, CONTENT_SETTING_ALLOW); |
| 276 CheckPermissionMessageSent(bridge_id() + 1, true); | 276 CheckPermissionMessageSent(bridge_id() + 1, true); |
| 277 contents()->RemoveInfoBar(infobar_1); | 277 contents()->RemoveInfoBar(infobar_1); |
| 278 EXPECT_EQ(infobar_1, | 278 EXPECT_EQ(1U, closed_delegate_tracker_->size()); |
| 279 tab_contents_with_pending_infobar_->removed_infobar_delegate_); | 279 EXPECT_TRUE(closed_delegate_tracker_->Contains(infobar_1)); |
| 280 infobar_1->InfoBarClosed(); | |
| 281 EXPECT_EQ(0, contents()->infobar_delegate_count()); | 280 EXPECT_EQ(0, contents()->infobar_delegate_count()); |
| 282 // Ensure the persisted permissions are ok. | 281 // Ensure the persisted permissions are ok. |
| 283 EXPECT_EQ( | 282 EXPECT_EQ( |
| 284 CONTENT_SETTING_ASK, | 283 CONTENT_SETTING_ASK, |
| 285 profile()->GetGeolocationContentSettingsMap()->GetContentSetting( | 284 profile()->GetGeolocationContentSettingsMap()->GetContentSetting( |
| 286 requesting_frame_0, requesting_frame_0)); | 285 requesting_frame_0, requesting_frame_0)); |
| 287 EXPECT_EQ( | 286 EXPECT_EQ( |
| 288 CONTENT_SETTING_ALLOW, | 287 CONTENT_SETTING_ALLOW, |
| 289 profile()->GetGeolocationContentSettingsMap()->GetContentSetting( | 288 profile()->GetGeolocationContentSettingsMap()->GetContentSetting( |
| 290 requesting_frame_1, requesting_frame_0)); | 289 requesting_frame_1, requesting_frame_0)); |
| 291 } | 290 } |
| 292 | 291 |
| 293 TEST_F(GeolocationPermissionContextTests, StopUpdating) { | 292 TEST_F(GeolocationPermissionContextTests, StopUpdating) { |
| 294 GURL requesting_frame("http://www.example.com/geolocation"); | 293 GURL requesting_frame("http://www.example.com/geolocation"); |
| 295 NavigateAndCommit(requesting_frame); | 294 NavigateAndCommit(requesting_frame); |
| 296 EXPECT_EQ(0, contents()->infobar_delegate_count()); | 295 EXPECT_EQ(0, contents()->infobar_delegate_count()); |
| 297 geolocation_permission_context_->RequestGeolocationPermission( | 296 geolocation_permission_context_->RequestGeolocationPermission( |
| 298 process_id(), render_id(), bridge_id(), requesting_frame); | 297 process_id(), render_id(), bridge_id(), requesting_frame); |
| 299 EXPECT_EQ(1, contents()->infobar_delegate_count()); | 298 EXPECT_EQ(1, contents()->infobar_delegate_count()); |
| 300 ConfirmInfoBarDelegate* infobar_0 = | 299 ConfirmInfoBarDelegate* infobar_0 = |
| 301 contents()->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); | 300 contents()->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); |
| 302 ASSERT_TRUE(infobar_0); | 301 ASSERT_TRUE(infobar_0); |
| 303 | 302 |
| 304 geolocation_permission_context_->StopUpdatingRequested( | 303 geolocation_permission_context_->StopUpdatingRequested( |
| 305 process_id(), render_id(), bridge_id()); | 304 process_id(), render_id(), bridge_id()); |
| 306 EXPECT_EQ(infobar_0, | 305 EXPECT_EQ(1U, closed_delegate_tracker_->size()); |
| 307 tab_contents_with_pending_infobar_->removed_infobar_delegate_); | 306 EXPECT_TRUE(closed_delegate_tracker_->Contains(infobar_0)); |
| 308 infobar_0->InfoBarClosed(); | |
| 309 EXPECT_EQ(0, contents()->infobar_delegate_count()); | 307 EXPECT_EQ(0, contents()->infobar_delegate_count()); |
| 310 EXPECT_EQ( | 308 EXPECT_EQ(CONTENT_SETTING_ASK, |
| 311 CONTENT_SETTING_ASK, | 309 profile()->GetGeolocationContentSettingsMap()->GetContentSetting( |
| 312 profile()->GetGeolocationContentSettingsMap()->GetContentSetting( | 310 requesting_frame, requesting_frame)); |
| 313 requesting_frame, requesting_frame)); | |
| 314 } | 311 } |
| 315 | 312 |
| 316 TEST_F(GeolocationPermissionContextTests, InvalidURL) { | 313 TEST_F(GeolocationPermissionContextTests, InvalidURL) { |
| 317 GURL invalid_embedder; | 314 GURL invalid_embedder; |
| 318 GURL requesting_frame("about:blank"); | 315 GURL requesting_frame("about:blank"); |
| 319 NavigateAndCommit(invalid_embedder); | 316 NavigateAndCommit(invalid_embedder); |
| 320 EXPECT_EQ(0, contents()->infobar_delegate_count()); | 317 EXPECT_EQ(0, contents()->infobar_delegate_count()); |
| 321 geolocation_permission_context_->RequestGeolocationPermission( | 318 geolocation_permission_context_->RequestGeolocationPermission( |
| 322 process_id(), render_id(), bridge_id(), requesting_frame); | 319 process_id(), render_id(), bridge_id(), requesting_frame); |
| 323 EXPECT_EQ(0, contents()->infobar_delegate_count()); | 320 EXPECT_EQ(0, contents()->infobar_delegate_count()); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 347 ConfirmInfoBarDelegate* removed_infobar = | 344 ConfirmInfoBarDelegate* removed_infobar = |
| 348 extra_tabs_[1]->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); | 345 extra_tabs_[1]->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); |
| 349 | 346 |
| 350 // Accept the first tab. | 347 // Accept the first tab. |
| 351 ConfirmInfoBarDelegate* infobar_0 = | 348 ConfirmInfoBarDelegate* infobar_0 = |
| 352 contents()->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); | 349 contents()->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); |
| 353 ASSERT_TRUE(infobar_0); | 350 ASSERT_TRUE(infobar_0); |
| 354 infobar_0->Accept(); | 351 infobar_0->Accept(); |
| 355 CheckPermissionMessageSent(bridge_id(), true); | 352 CheckPermissionMessageSent(bridge_id(), true); |
| 356 contents()->RemoveInfoBar(infobar_0); | 353 contents()->RemoveInfoBar(infobar_0); |
| 357 EXPECT_EQ(infobar_0, | 354 EXPECT_EQ(2U, closed_delegate_tracker_->size()); |
| 358 tab_contents_with_pending_infobar_->removed_infobar_delegate_); | 355 EXPECT_TRUE(closed_delegate_tracker_->Contains(infobar_0)); |
| 359 infobar_0->InfoBarClosed(); | |
| 360 // Now the infobar for the tab with the same origin should have gone. | 356 // Now the infobar for the tab with the same origin should have gone. |
| 361 EXPECT_EQ(0, extra_tabs_[1]->infobar_delegate_count()); | 357 EXPECT_EQ(0, extra_tabs_[1]->infobar_delegate_count()); |
| 362 CheckPermissionMessageSentForTab(1, bridge_id(), true); | 358 CheckPermissionMessageSentForTab(1, bridge_id(), true); |
| 363 // Destroy the infobar that has just been removed. | 359 EXPECT_TRUE(closed_delegate_tracker_->Contains(removed_infobar)); |
| 364 removed_infobar->InfoBarClosed(); | |
| 365 | 360 |
| 366 // But the other tab should still have the info bar... | 361 // But the other tab should still have the info bar... |
| 367 EXPECT_EQ(1, extra_tabs_[0]->infobar_delegate_count()); | 362 EXPECT_EQ(1, extra_tabs_[0]->infobar_delegate_count()); |
| 368 extra_tabs_.reset(); | 363 extra_tabs_.reset(); |
| 369 } | 364 } |
| 370 | 365 |
| 371 TEST_F(GeolocationPermissionContextTests, QueuedOriginMultipleTabs) { | 366 TEST_F(GeolocationPermissionContextTests, QueuedOriginMultipleTabs) { |
| 372 GURL url_a("http://www.example.com/geolocation"); | 367 GURL url_a("http://www.example.com/geolocation"); |
| 373 GURL url_b("http://www.example-2.com/geolocation"); | 368 GURL url_b("http://www.example-2.com/geolocation"); |
| 374 NavigateAndCommit(url_a); | 369 NavigateAndCommit(url_a); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 390 ConfirmInfoBarDelegate* removed_infobar = | 385 ConfirmInfoBarDelegate* removed_infobar = |
| 391 contents()->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); | 386 contents()->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); |
| 392 | 387 |
| 393 // Accept the second tab. | 388 // Accept the second tab. |
| 394 ConfirmInfoBarDelegate* infobar_0 = | 389 ConfirmInfoBarDelegate* infobar_0 = |
| 395 extra_tabs_[0]->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); | 390 extra_tabs_[0]->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); |
| 396 ASSERT_TRUE(infobar_0); | 391 ASSERT_TRUE(infobar_0); |
| 397 infobar_0->Accept(); | 392 infobar_0->Accept(); |
| 398 CheckPermissionMessageSentForTab(0, bridge_id(), true); | 393 CheckPermissionMessageSentForTab(0, bridge_id(), true); |
| 399 extra_tabs_[0]->RemoveInfoBar(infobar_0); | 394 extra_tabs_[0]->RemoveInfoBar(infobar_0); |
| 400 EXPECT_EQ(infobar_0, | 395 EXPECT_EQ(2U, closed_delegate_tracker_->size()); |
| 401 extra_tabs_[0]->removed_infobar_delegate_); | 396 EXPECT_TRUE(closed_delegate_tracker_->Contains(infobar_0)); |
| 402 infobar_0->InfoBarClosed(); | |
| 403 // Now the infobar for the tab with the same origin should have gone. | 397 // Now the infobar for the tab with the same origin should have gone. |
| 404 EXPECT_EQ(0, contents()->infobar_delegate_count()); | 398 EXPECT_EQ(0, contents()->infobar_delegate_count()); |
| 405 CheckPermissionMessageSent(bridge_id(), true); | 399 CheckPermissionMessageSent(bridge_id(), true); |
| 406 // Destroy the infobar that has just been removed. | 400 EXPECT_TRUE(closed_delegate_tracker_->Contains(removed_infobar)); |
| 407 removed_infobar->InfoBarClosed(); | 401 closed_delegate_tracker_->Clear(); |
| 408 | 402 |
| 409 // And we should have the queued infobar displayed now. | 403 // And we should have the queued infobar displayed now. |
| 410 EXPECT_EQ(1, extra_tabs_[0]->infobar_delegate_count()); | 404 EXPECT_EQ(1, extra_tabs_[0]->infobar_delegate_count()); |
| 411 | 405 |
| 412 // Accept the second infobar. | 406 // Accept the second infobar. |
| 413 ConfirmInfoBarDelegate* infobar_1 = | 407 ConfirmInfoBarDelegate* infobar_1 = |
| 414 extra_tabs_[0]->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); | 408 extra_tabs_[0]->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); |
| 415 ASSERT_TRUE(infobar_1); | 409 ASSERT_TRUE(infobar_1); |
| 416 infobar_1->Accept(); | 410 infobar_1->Accept(); |
| 417 CheckPermissionMessageSentForTab(0, bridge_id() + 1, true); | 411 CheckPermissionMessageSentForTab(0, bridge_id() + 1, true); |
| 418 extra_tabs_[0]->RemoveInfoBar(infobar_1); | 412 extra_tabs_[0]->RemoveInfoBar(infobar_1); |
| 419 EXPECT_EQ(infobar_1, | 413 EXPECT_EQ(1U, closed_delegate_tracker_->size()); |
| 420 extra_tabs_[0]->removed_infobar_delegate_); | 414 EXPECT_TRUE(closed_delegate_tracker_->Contains(infobar_1)); |
| 421 infobar_1->InfoBarClosed(); | |
| 422 | 415 |
| 423 extra_tabs_.reset(); | 416 extra_tabs_.reset(); |
| 424 } | 417 } |
| OLD | NEW |