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

Unified Diff: chrome/browser/geolocation/geolocation_permission_context_unittest.cc

Issue 6993030: Move GeolocationPermissionContextUnittest from subclassing TabContentsWrapper to merely observing... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/ui/tab_contents/test_tab_contents_wrapper.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/geolocation/geolocation_permission_context_unittest.cc
===================================================================
--- chrome/browser/geolocation/geolocation_permission_context_unittest.cc (revision 87725)
+++ chrome/browser/geolocation/geolocation_permission_context_unittest.cc (working copy)
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <set>
+
#include "base/memory/scoped_vector.h"
#include "chrome/browser/content_settings/tab_specific_content_settings.h"
#include "chrome/browser/geolocation/geolocation_content_settings_map.h"
@@ -18,59 +20,61 @@
#include "content/browser/renderer_host/mock_render_process_host.h"
#include "content/browser/tab_contents/test_tab_contents.h"
#include "content/common/geolocation_messages.h"
-#include "content/common/notification_details.h"
#include "content/common/notification_registrar.h"
-#include "content/common/notification_source.h"
-#include "content/common/notification_type.h"
+#include "content/common/notification_service.h"
#include "testing/gtest/include/gtest/gtest.h"
-// TestTabContentsWithPendingInfoBar ------------------------------------------
+// ClosedDelegateTracker ------------------------------------------------------
namespace {
-// TestTabContents short-circuits TAB_CONTENTS_INFOBAR_REMOVED to call
-// InfoBarClosed() directly. We need to observe it and call InfoBarClosed()
-// later.
-class TestTabContentsWithPendingInfoBar : public TabContentsWrapper {
+// We need to track which infobars were closed.
+class ClosedDelegateTracker : public NotificationObserver {
public:
- TestTabContentsWithPendingInfoBar(Profile* profile, SiteInstance* instance);
- virtual ~TestTabContentsWithPendingInfoBar();
+ ClosedDelegateTracker();
+ virtual ~ClosedDelegateTracker();
- // TabContentsWrapper:
+ // NotificationObserver:
virtual void Observe(NotificationType type,
const NotificationSource& source,
const NotificationDetails& details);
- InfoBarDelegate* removed_infobar_delegate_;
+ size_t size() const {
+ return removed_infobar_delegates_.size();
+ }
+
+ bool Contains(InfoBarDelegate* delegate) const;
+ void Clear();
+
+ private:
NotificationRegistrar registrar_;
+ std::set<InfoBarDelegate*> removed_infobar_delegates_;
};
-TestTabContentsWithPendingInfoBar::TestTabContentsWithPendingInfoBar(
- Profile* profile,
- SiteInstance* instance)
- : TabContentsWrapper(
- new TabContents(profile, instance, MSG_ROUTING_NONE, NULL, NULL)),
- removed_infobar_delegate_(NULL) {
- Source<TabContentsWrapper> source(this);
+ClosedDelegateTracker::ClosedDelegateTracker() {
registrar_.Add(this, NotificationType::TAB_CONTENTS_INFOBAR_REMOVED,
- source);
+ NotificationService::AllSources());
}
-TestTabContentsWithPendingInfoBar::~TestTabContentsWithPendingInfoBar() {
+ClosedDelegateTracker::~ClosedDelegateTracker() {
}
-void TestTabContentsWithPendingInfoBar::Observe(
- NotificationType type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- if (type.value == NotificationType::TAB_CONTENTS_INFOBAR_REMOVED) {
- removed_infobar_delegate_ =
- Details<std::pair<InfoBarDelegate*, bool> >(details)->first;
- } else {
- TabContentsWrapper::Observe(type, source, details);
- }
+void ClosedDelegateTracker::Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ DCHECK(type.value == NotificationType::TAB_CONTENTS_INFOBAR_REMOVED);
+ removed_infobar_delegates_.insert(
+ Details<std::pair<InfoBarDelegate*, bool> >(details)->first);
}
+bool ClosedDelegateTracker::Contains(InfoBarDelegate* delegate) const {
+ return removed_infobar_delegates_.count(delegate) != 0;
+}
+
+void ClosedDelegateTracker::Clear() {
+ removed_infobar_delegates_.clear();
+}
+
} // namespace
@@ -86,11 +90,12 @@
int process_id() { return contents()->render_view_host()->process()->id(); }
int process_id_for_tab(int tab) {
- return extra_tabs_[tab]->render_view_host()->process()->id();
+ return extra_tabs_[tab]->tab_contents()->render_view_host()->process()->
+ id();
}
int render_id() { return contents()->render_view_host()->routing_id(); }
int render_id_for_tab(int tab) {
- return extra_tabs_[tab]->render_view_host()->routing_id();
+ return extra_tabs_[tab]->tab_contents()->render_view_host()->routing_id();
}
int bridge_id() const { return 42; } // Not relevant at this level.
@@ -103,9 +108,9 @@
void CheckTabContentsState(const GURL& requesting_frame,
ContentSetting expected_content_setting);
- TestTabContentsWithPendingInfoBar* tab_contents_with_pending_infobar_;
scoped_refptr<GeolocationPermissionContext> geolocation_permission_context_;
- ScopedVector<TestTabContentsWithPendingInfoBar> extra_tabs_;
+ ClosedDelegateTracker closed_delegate_tracker_;
+ ScopedVector<TabContentsWrapper> extra_tabs_;
private:
// TabContentsWrapperTestHarness:
@@ -117,7 +122,7 @@
};
GeolocationPermissionContextTests::GeolocationPermissionContextTests()
- : tab_contents_with_pending_infobar_(NULL),
+ : TabContentsWrapperTestHarness(),
ui_thread_(BrowserThread::UI, MessageLoop::current()),
dependency_factory_(
new GeolocationArbitratorDependencyFactoryWithLocationProvider(
@@ -138,7 +143,8 @@
int bridge_id,
bool allowed) {
CheckPermissionMessageSentInternal(static_cast<MockRenderProcessHost*>(
- extra_tabs_[tab]->render_view_host()->process()), bridge_id, allowed);
+ extra_tabs_[tab]->tab_contents()->render_view_host()->process()),
+ bridge_id, allowed);
}
void GeolocationPermissionContextTests::CheckPermissionMessageSentInternal(
@@ -158,12 +164,12 @@
}
void GeolocationPermissionContextTests::AddNewTab(const GURL& url) {
- TestTabContentsWithPendingInfoBar* new_tab =
- new TestTabContentsWithPendingInfoBar(profile(), NULL);
+ TabContents* new_tab =
+ new TabContents(profile(), NULL, MSG_ROUTING_NONE, NULL, NULL);
new_tab->controller().LoadURL(url, GURL(), PageTransition::TYPED);
- static_cast<TestRenderViewHost*>(new_tab->tab_contents()->render_manager()->
- current_host())->SendNavigate(extra_tabs_.size() + 1, url);
- extra_tabs_.push_back(new_tab);
+ static_cast<TestRenderViewHost*>(new_tab->render_manager()->current_host())->
+ SendNavigate(extra_tabs_.size() + 1, url);
+ extra_tabs_.push_back(new TabContentsWrapper(new_tab));
}
void GeolocationPermissionContextTests::CheckTabContentsState(
@@ -186,10 +192,6 @@
TabContentsWrapperTestHarness::SetUp();
GeolocationArbitrator::SetDependencyFactoryForTest(
dependency_factory_.get());
- SiteInstance* site_instance = contents()->GetSiteInstance();
- tab_contents_with_pending_infobar_ =
- new TestTabContentsWithPendingInfoBar(profile_.get(), site_instance);
- SetContentsWrapper(tab_contents_with_pending_infobar_);
geolocation_permission_context_ =
new GeolocationPermissionContext(profile());
}
@@ -241,8 +243,9 @@
CheckPermissionMessageSent(bridge_id(), true);
contents_wrapper()->RemoveInfoBar(infobar_0);
- EXPECT_EQ(infobar_0,
- tab_contents_with_pending_infobar_->removed_infobar_delegate_);
+ EXPECT_EQ(1U, closed_delegate_tracker_.size());
+ EXPECT_TRUE(closed_delegate_tracker_.Contains(infobar_0));
+ closed_delegate_tracker_.Clear();
infobar_0->InfoBarClosed();
// Now we should have a new infobar for the second frame.
EXPECT_EQ(1U, contents_wrapper()->infobar_count());
@@ -258,8 +261,8 @@
CheckTabContentsState(requesting_frame_1, CONTENT_SETTING_BLOCK);
CheckPermissionMessageSent(bridge_id() + 1, false);
contents_wrapper()->RemoveInfoBar(infobar_1);
- EXPECT_EQ(infobar_1,
- tab_contents_with_pending_infobar_->removed_infobar_delegate_);
+ EXPECT_EQ(1U, closed_delegate_tracker_.size());
+ EXPECT_TRUE(closed_delegate_tracker_.Contains(infobar_1));
infobar_1->InfoBarClosed();
EXPECT_EQ(0U, contents_wrapper()->infobar_count());
// Ensure the persisted permissions are ok.
@@ -299,8 +302,9 @@
// is removed and the next pending infobar is created.
geolocation_permission_context_->CancelGeolocationPermissionRequest(
process_id(), render_id(), bridge_id(), requesting_frame_0);
- EXPECT_EQ(infobar_0,
- tab_contents_with_pending_infobar_->removed_infobar_delegate_);
+ EXPECT_EQ(1U, closed_delegate_tracker_.size());
+ EXPECT_TRUE(closed_delegate_tracker_.Contains(infobar_0));
+ closed_delegate_tracker_.Clear();
infobar_0->InfoBarClosed();
EXPECT_EQ(1U, contents_wrapper()->infobar_count());
@@ -315,8 +319,8 @@
CheckTabContentsState(requesting_frame_1, CONTENT_SETTING_ALLOW);
CheckPermissionMessageSent(bridge_id() + 1, true);
contents_wrapper()->RemoveInfoBar(infobar_1);
- EXPECT_EQ(infobar_1,
- tab_contents_with_pending_infobar_->removed_infobar_delegate_);
+ EXPECT_EQ(1U, closed_delegate_tracker_.size());
+ EXPECT_TRUE(closed_delegate_tracker_.Contains(infobar_1));
infobar_1->InfoBarClosed();
EXPECT_EQ(0U, contents_wrapper()->infobar_count());
// Ensure the persisted permissions are ok.
@@ -369,12 +373,13 @@
infobar_0->Accept();
CheckPermissionMessageSent(bridge_id(), true);
contents_wrapper()->RemoveInfoBar(infobar_0);
- EXPECT_EQ(infobar_0,
- tab_contents_with_pending_infobar_->removed_infobar_delegate_);
+ EXPECT_EQ(2U, closed_delegate_tracker_.size());
+ EXPECT_TRUE(closed_delegate_tracker_.Contains(infobar_0));
infobar_0->InfoBarClosed();
// Now the infobar for the tab with the same origin should have gone.
EXPECT_EQ(0U, extra_tabs_[1]->infobar_count());
CheckPermissionMessageSentForTab(1, bridge_id(), true);
+ EXPECT_TRUE(closed_delegate_tracker_.Contains(removed_infobar));
// Destroy the infobar that has just been removed.
removed_infobar->InfoBarClosed();
@@ -412,12 +417,14 @@
infobar_0->Accept();
CheckPermissionMessageSentForTab(0, bridge_id(), true);
extra_tabs_[0]->RemoveInfoBar(infobar_0);
- EXPECT_EQ(infobar_0,
- extra_tabs_[0]->removed_infobar_delegate_);
+ EXPECT_EQ(2U, closed_delegate_tracker_.size());
+ EXPECT_TRUE(closed_delegate_tracker_.Contains(infobar_0));
infobar_0->InfoBarClosed();
// Now the infobar for the tab with the same origin should have gone.
EXPECT_EQ(0U, contents_wrapper()->infobar_count());
CheckPermissionMessageSent(bridge_id(), true);
+ EXPECT_TRUE(closed_delegate_tracker_.Contains(removed_infobar));
+ closed_delegate_tracker_.Clear();
// Destroy the infobar that has just been removed.
removed_infobar->InfoBarClosed();
@@ -431,8 +438,8 @@
infobar_1->Accept();
CheckPermissionMessageSentForTab(0, bridge_id() + 1, true);
extra_tabs_[0]->RemoveInfoBar(infobar_1);
- EXPECT_EQ(infobar_1,
- extra_tabs_[0]->removed_infobar_delegate_);
+ EXPECT_EQ(1U, closed_delegate_tracker_.size());
+ EXPECT_TRUE(closed_delegate_tracker_.Contains(infobar_1));
infobar_1->InfoBarClosed();
extra_tabs_.reset();
« no previous file with comments | « no previous file | chrome/browser/ui/tab_contents/test_tab_contents_wrapper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698