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

Unified Diff: chrome/browser/policy/url_blacklist_manager_unittest.cc

Issue 7747018: Introduced the URLBlacklistManager, and wired it to various places. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added TODO for interaction with extensions Created 9 years, 4 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
Index: chrome/browser/policy/url_blacklist_manager_unittest.cc
diff --git a/chrome/browser/policy/url_blacklist_manager_unittest.cc b/chrome/browser/policy/url_blacklist_manager_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..dbd619718da2a3c338e2588b3890ce758195d0d3
--- /dev/null
+++ b/chrome/browser/policy/url_blacklist_manager_unittest.cc
@@ -0,0 +1,191 @@
+// Copyright (c) 2011 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/policy/url_blacklist_manager.h"
+
+#include "base/basictypes.h"
+#include "base/memory/linked_ptr.h"
+#include "base/message_loop.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/test/base/testing_pref_service.h"
+#include "content/browser/browser_thread.h"
+#include "content/common/notification_service.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace policy {
+
+namespace {
+
+using ::testing::_;
+using ::testing::Invoke;
+using ::testing::Mock;
+
+class TestingURLBlacklistManager : public URLBlacklistManager {
+ public:
+ explicit TestingURLBlacklistManager(PrefService* pref_service)
+ : URLBlacklistManager(pref_service) {
+ }
+
+ virtual ~TestingURLBlacklistManager() {
+ }
+
+ // Make this method public for testing.
+ using URLBlacklistManager::ScheduleUpdate;
+
+ // Post tasks without a delay during tests.
+ virtual void PostUpdateTask(Task* task) OVERRIDE {
+ MessageLoop::current()->PostTask(FROM_HERE, task);
+ }
+
+ // Makes a direct call to UpdateOnIO during tests.
+ void UpdateOnIO() {
+ linked_ptr<StringVector> block(new StringVector);
+ block->push_back("example.com");
+ linked_ptr<StringVector> allow(new StringVector);
+ URLBlacklistManager::UpdateOnIO(block, allow);
+ }
+
+ void UpdateNotMocked() {
+ URLBlacklistManager::Update();
+ }
+
+ MOCK_METHOD0(Update, void());
+ MOCK_METHOD1(SetBlacklist, void(linked_ptr<Blacklist>));
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TestingURLBlacklistManager);
+};
+
+class URLBlacklistManagerTest : public testing::Test {
+ protected:
+ URLBlacklistManagerTest()
+ : ui_thread_(BrowserThread::UI, &loop_),
+ file_thread_(BrowserThread::FILE, &loop_),
+ io_thread_(BrowserThread::IO, &loop_) {
+ }
+
+ virtual void SetUp() OVERRIDE {
+ pref_service_.RegisterListPref(prefs::kUrlBlacklist);
+ pref_service_.RegisterListPref(prefs::kUrlWhitelist);
+ url_blacklist_manager_.reset(
+ new TestingURLBlacklistManager(&pref_service_));
+ loop_.RunAllPending();
+ }
+
+ virtual void TearDown() OVERRIDE {
+ if (url_blacklist_manager_.get())
+ url_blacklist_manager_->ShutdownOnUIThread();
+ loop_.RunAllPending();
+ }
+
+ void ExpectUpdate() {
+ EXPECT_CALL(*url_blacklist_manager_, Update())
+ .WillOnce(Invoke(url_blacklist_manager_.get(),
+ &TestingURLBlacklistManager::UpdateNotMocked));
+ }
+
+ MessageLoop loop_;
+ TestingPrefService pref_service_;
+ scoped_ptr<TestingURLBlacklistManager> url_blacklist_manager_;
+
+ private:
+ BrowserThread ui_thread_;
+ BrowserThread file_thread_;
+ BrowserThread io_thread_;
+
+ DISALLOW_COPY_AND_ASSIGN(URLBlacklistManagerTest);
+};
+
+TEST_F(URLBlacklistManagerTest, SingleUpdateForTwoPrefChanges) {
+ ExpectUpdate();
+
+ ListValue* blacklist = new ListValue;
+ blacklist->Append(new StringValue("*.google.com"));
+ ListValue* whitelist = new ListValue;
+ whitelist->Append(new StringValue("mail.google.com"));
+ pref_service_.SetManagedPref(prefs::kUrlBlacklist, blacklist);
+ pref_service_.SetManagedPref(prefs::kUrlBlacklist, whitelist);
+ loop_.RunAllPending();
+
+ Mock::VerifyAndClearExpectations(url_blacklist_manager_.get());
+}
+
+TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask0) {
+ // Post an update task to the UI thread.
+ url_blacklist_manager_->ScheduleUpdate();
+ // Shutdown comes before the task is executed.
+ url_blacklist_manager_->ShutdownOnUIThread();
+ url_blacklist_manager_.reset();
+ // Run the task after shutdown and deletion.
+ loop_.RunAllPending();
+}
+
+TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask1) {
+ EXPECT_CALL(*url_blacklist_manager_, Update()).Times(0);
+ // Post an update task.
+ url_blacklist_manager_->ScheduleUpdate();
+ // Shutdown comes before the task is executed.
+ url_blacklist_manager_->ShutdownOnUIThread();
+ // Run the task after shutdown, but before deletion.
+ loop_.RunAllPending();
+ Mock::VerifyAndClearExpectations(url_blacklist_manager_.get());
+ url_blacklist_manager_.reset();
+ loop_.RunAllPending();
+}
+
+TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask2) {
+ // Update posts a BuildBlacklistTask to the FILE thread.
+ url_blacklist_manager_->UpdateNotMocked();
+ // Shutdown comes before the task is executed.
+ url_blacklist_manager_->ShutdownOnUIThread();
+ url_blacklist_manager_.reset();
+ // Run the task after shutdown and deletion.
+ loop_.RunAllPending();
+}
+
+TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask3) {
+ EXPECT_CALL(*url_blacklist_manager_, SetBlacklist(_)).Times(0);
+ // Update posts a BuildBlacklistTask to the FILE thread.
+ url_blacklist_manager_->UpdateNotMocked();
+ // Shutdown comes before the task is executed.
+ url_blacklist_manager_->ShutdownOnUIThread();
+ // Run the task after shutdown, but before deletion.
+ loop_.RunAllPending();
+ Mock::VerifyAndClearExpectations(url_blacklist_manager_.get());
+ url_blacklist_manager_.reset();
+ loop_.RunAllPending();
+}
+
+TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask4) {
+ EXPECT_CALL(*url_blacklist_manager_, SetBlacklist(_)).Times(0);
+
+ // This posts a task to the FILE thread.
+ url_blacklist_manager_->UpdateOnIO();
+ // But shutdown happens before it is done.
+ url_blacklist_manager_->ShutdownOnUIThread();
+ url_blacklist_manager_.reset();
+ loop_.RunAllPending();
+
+ Mock::VerifyAndClearExpectations(url_blacklist_manager_.get());
+}
+
+TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask5) {
+ EXPECT_CALL(*url_blacklist_manager_, SetBlacklist(_)).Times(0);
+
+ // This posts a task to the FILE thread.
+ url_blacklist_manager_->UpdateOnIO();
+ // But shutdown happens before it is done.
+ url_blacklist_manager_->ShutdownOnUIThread();
+ // This time, shutdown on UI is done but the object is still alive.
+ loop_.RunAllPending();
+ url_blacklist_manager_.reset();
+ loop_.RunAllPending();
+
+ Mock::VerifyAndClearExpectations(url_blacklist_manager_.get());
+}
+
+} // namespace
+
+} // namespace policy

Powered by Google App Engine
This is Rietveld 408576698