15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_remover.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/guid.h"
159ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/platform_file.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/testing_pref_service.h"
18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autofill/personal_data_manager_factory.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_helper.h"
217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h"
220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(OS_CHROMEOS)
230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/chromeos/login/mock_user_manager.h"
240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/chromeos/login/user_manager.h"
250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h"
260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_service.h"
270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/mock_extension_special_storage_policy.h"
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/history/history_service.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_service_factory.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/safe_browsing/safe_browsing_service.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_browser_process.h"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h"
350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(OS_CHROMEOS)
360f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h"
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chromeos/dbus/fake_dbus_thread_manager.h"
380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chromeos/dbus/mock_cryptohome_client.h"
390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_profile.h"
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/autofill/core/browser/autofill_test_utils.h"
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/credit_card.h"
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/personal_data_manager.h"
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/personal_data_manager_observer.h"
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/dom_storage_context.h"
46bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "content/public/browser/local_storage_usage_info.h"
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h"
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/storage_partition.h"
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h"
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/test/test_browser_thread_bundle.h"
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/cookie_monster.h"
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/ssl/server_bound_cert_service.h"
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/ssl/server_bound_cert_store.h"
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/ssl/ssl_client_cert_type.h"
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_context.h"
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_context_getter.h"
570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread;
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using content::StoragePartition;
620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)using testing::_;
630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)using testing::Invoke;
640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)using testing::WithArgs;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTestOrigin1[] = "http://host1:1/";
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTestOrigin2[] = "http://host2:1/";
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTestOrigin3[] = "http://host3:1/";
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTestOriginExt[] = "chrome-extension://abcdefghijklmnopqrstuvwxyz/";
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTestOriginDevTools[] = "chrome-devtools://abcdefghijklmnopqrstuvw/";
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// For Autofill.
7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const char kChromeOrigin[] = "Chrome settings";
7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const char kWebOrigin[] = "https://www.example.com/";
7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GURL kOrigin1(kTestOrigin1);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GURL kOrigin2(kTestOrigin2);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GURL kOrigin3(kTestOrigin3);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GURL kOriginExt(kTestOriginExt);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GURL kOriginDevTools(kTestOriginDevTools);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::FilePath::CharType kDomStorageOrigin1[] =
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FILE_PATH_LITERAL("http_host1_1.localstorage");
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::FilePath::CharType kDomStorageOrigin2[] =
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FILE_PATH_LITERAL("http_host2_1.localstorage");
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::FilePath::CharType kDomStorageOrigin3[] =
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FILE_PATH_LITERAL("http_host3_1.localstorage");
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::FilePath::CharType kDomStorageExt[] = FILE_PATH_LITERAL(
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "chrome-extension_abcdefghijklmnopqrstuvwxyz_0.localstorage");
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AwaitCompletionHelper : public BrowsingDataRemover::Observer {
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AwaitCompletionHelper() : start_(false), already_quit_(false) {}
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~AwaitCompletionHelper() {}
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void BlockUntilNotified() {
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!already_quit_) {
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      DCHECK(!start_);
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      start_ = true;
10590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      base::MessageLoop::current()->Run();
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      DCHECK(!start_);
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      already_quit_ = false;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Notify() {
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (start_) {
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      DCHECK(!already_quit_);
11590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      base::MessageLoop::current()->Quit();
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      start_ = false;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      DCHECK(!already_quit_);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      already_quit_ = true;
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // BrowsingDataRemover::Observer implementation.
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnBrowsingDataRemoverDone() OVERRIDE {
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Notify();
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Helps prevent from running message_loop, if the callback invoked
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // immediately.
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool start_;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool already_quit_;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AwaitCompletionHelper);
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(OS_CHROMEOS)
1390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)void FakeDBusCall(const chromeos::BoolDBusMethodCallback& callback) {
1400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  base::MessageLoop::current()->PostTask(
1410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      FROM_HERE,
1420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      base::Bind(callback, chromeos::DBUS_METHOD_CALL_SUCCESS, true));
1430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
1440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif
1450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct StoragePartitionRemovalData {
147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  uint32 remove_mask;
148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  uint32 quota_storage_remove_mask;
149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  GURL remove_origin;
150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  base::Time remove_begin;
151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  base::Time remove_end;
152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartition::OriginMatcherFunction origin_matcher;
153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData() : remove_mask(0),
155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                  quota_storage_remove_mask(0) {}
156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class TestStoragePartition : public StoragePartition {
159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public:
160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  TestStoragePartition() {}
161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual ~TestStoragePartition() {}
162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // content::StoragePartition implementation.
164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual base::FilePath GetPath() OVERRIDE { return base::FilePath(); }
165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual net::URLRequestContextGetter* GetURLRequestContext() OVERRIDE {
166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return NULL;
167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual net::URLRequestContextGetter* GetMediaURLRequestContext() OVERRIDE {
169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return NULL;
170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual quota::QuotaManager* GetQuotaManager() OVERRIDE {
172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return NULL;
173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual appcache::AppCacheService* GetAppCacheService() OVERRIDE {
175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return NULL;
176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual fileapi::FileSystemContext* GetFileSystemContext() OVERRIDE {
178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return NULL;
179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual webkit_database::DatabaseTracker* GetDatabaseTracker() OVERRIDE {
181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return NULL;
182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual content::DOMStorageContext* GetDOMStorageContext() OVERRIDE {
184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return NULL;
185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual content::IndexedDBContext* GetIndexedDBContext() OVERRIDE {
187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return NULL;
188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void ClearDataForOrigin(
191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      uint32 remove_mask,
192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      uint32 quota_storage_remove_mask,
193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const GURL& storage_origin,
194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      net::URLRequestContextGetter* rq_context) OVERRIDE {}
195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void ClearData(uint32 remove_mask,
197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                         uint32 quota_storage_remove_mask,
198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                         const GURL* storage_origin,
199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                         const OriginMatcherFunction& origin_matcher,
200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                         const base::Time begin,
201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                         const base::Time end,
202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                         const base::Closure& callback) OVERRIDE {
203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Store stuff to verify parameters' correctness later.
204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_removal_data_.remove_mask = remove_mask;
205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_removal_data_.quota_storage_remove_mask =
206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        quota_storage_remove_mask;
207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_removal_data_.remove_origin =
208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        storage_origin ? *storage_origin : GURL();
209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_removal_data_.remove_begin = begin;
210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_removal_data_.remove_end = end;
211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_removal_data_.origin_matcher = origin_matcher;
212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    BrowserThread::PostTask(
214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        BrowserThread::UI,
215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        FROM_HERE,
216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        base::Bind(&TestStoragePartition::AsyncRunCallback,
217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                   base::Unretained(this), callback));
218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData GetStoragePartitionRemovalData() {
221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return storage_partition_removal_data_;
222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void AsyncRunCallback(const base::Closure& callback) {
225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    callback.Run();
226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData storage_partition_removal_data_;
229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TestStoragePartition);
231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Testers -------------------------------------------------------------------
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RemoveCookieTester {
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2393240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  RemoveCookieTester() : get_cookie_success_(false), monster_(NULL) {
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true, if the given cookie exists in the cookie store.
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool ContainsCookie() {
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    get_cookie_success_ = false;
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    monster_->GetCookiesWithOptionsAsync(
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        kOrigin1, net::CookieOptions(),
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&RemoveCookieTester::GetCookieCallback,
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   base::Unretained(this)));
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    await_completion_.BlockUntilNotified();
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return get_cookie_success_;
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddCookie() {
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    monster_->SetCookieWithOptionsAsync(
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        kOrigin1, "A=1", net::CookieOptions(),
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&RemoveCookieTester::SetCookieCallback,
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   base::Unretained(this)));
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    await_completion_.BlockUntilNotified();
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetMonster(net::CookieStore* monster) {
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    monster_ = monster;
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void GetCookieCallback(const std::string& cookies) {
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (cookies == "A=1") {
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      get_cookie_success_ = true;
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      EXPECT_EQ("", cookies);
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      get_cookie_success_ = false;
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    await_completion_.Notify();
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetCookieCallback(bool result) {
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(result);
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    await_completion_.Notify();
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool get_cookie_success_;
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AwaitCompletionHelper await_completion_;
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::CookieStore* monster_;
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(RemoveCookieTester);
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(FULL_SAFE_BROWSING) || defined(MOBILE_SAFE_BROWSING)
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RemoveSafeBrowsingCookieTester : public RemoveCookieTester {
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RemoveSafeBrowsingCookieTester()
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      : browser_process_(TestingBrowserProcess::GetGlobal()) {
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<SafeBrowsingService> sb_service =
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        SafeBrowsingService::CreateSafeBrowsingService();
296868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    browser_process_->SetSafeBrowsingService(sb_service.get());
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sb_service->Initialize();
29890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    base::MessageLoop::current()->RunUntilIdle();
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Create a cookiemonster that does not have persistant storage, and replace
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // the SafeBrowsingService created one with it.
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    net::CookieStore* monster = new net::CookieMonster(NULL, NULL);
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sb_service->url_request_context()->GetURLRequestContext()->
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        set_cookie_store(monster);
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetMonster(monster);
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~RemoveSafeBrowsingCookieTester() {
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    browser_process_->safe_browsing_service()->ShutDown();
31090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    base::MessageLoop::current()->RunUntilIdle();
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    browser_process_->SetSafeBrowsingService(NULL);
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestingBrowserProcess* browser_process_;
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(RemoveSafeBrowsingCookieTester);
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class RemoveServerBoundCertTester : public net::SSLConfigService::Observer {
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  explicit RemoveServerBoundCertTester(TestingProfile* profile)
3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      : ssl_config_changed_count_(0) {
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    server_bound_cert_service_ = profile->GetRequestContext()->
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GetURLRequestContext()->server_bound_cert_service();
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ssl_config_service_ = profile->GetSSLConfigService();
3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ssl_config_service_->AddObserver(this);
3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~RemoveServerBoundCertTester() {
3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ssl_config_service_->RemoveObserver(this);
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int ServerBoundCertCount() {
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return server_bound_cert_service_->cert_count();
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add a server bound cert for |server| with specific creation and expiry
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // times.  The cert and key data will be filled with dummy values.
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddServerBoundCertWithTimes(const std::string& server_identifier,
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   base::Time creation_time,
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   base::Time expiration_time) {
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GetCertStore()->SetServerBoundCert(server_identifier,
345bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch                                       creation_time,
346bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch                                       expiration_time,
347bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch                                       "a",
348bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch                                       "b");
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add a server bound cert for |server|, with the current time as the
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // creation time.  The cert and key data will be filled with dummy values.
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddServerBoundCert(const std::string& server_identifier) {
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::Time now = base::Time::Now();
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddServerBoundCertWithTimes(server_identifier,
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                now,
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                now + base::TimeDelta::FromDays(1));
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void GetCertList(net::ServerBoundCertStore::ServerBoundCertList* certs) {
3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    GetCertStore()->GetAllServerBoundCerts(
3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        base::Bind(&RemoveServerBoundCertTester::GetAllCertsCallback, certs));
3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::ServerBoundCertStore* GetCertStore() {
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return server_bound_cert_service_->GetCertStore();
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int ssl_config_changed_count() const {
3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return ssl_config_changed_count_;
3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // net::SSLConfigService::Observer implementation:
3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnSSLConfigChanged() OVERRIDE {
3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ssl_config_changed_count_++;
3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void GetAllCertsCallback(
3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      net::ServerBoundCertStore::ServerBoundCertList* dest,
3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const net::ServerBoundCertStore::ServerBoundCertList& result) {
3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    *dest = result;
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  net::ServerBoundCertService* server_bound_cert_service_;
3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<net::SSLConfigService> ssl_config_service_;
3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int ssl_config_changed_count_;
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(RemoveServerBoundCertTester);
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RemoveHistoryTester {
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
394bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  RemoveHistoryTester() : query_url_success_(false), history_service_(NULL) {}
395bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch
396bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  bool Init(TestingProfile* profile) WARN_UNUSED_RESULT {
397bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch    if (!profile->CreateHistoryService(true, false))
398bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch      return false;
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    history_service_ = HistoryServiceFactory::GetForProfile(
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        profile, Profile::EXPLICIT_ACCESS);
401bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch    return true;
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true, if the given URL exists in the history service.
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool HistoryContainsURL(const GURL& url) {
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    history_service_->QueryURL(
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        url,
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        true,
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        &consumer_,
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&RemoveHistoryTester::SaveResultAndQuit,
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   base::Unretained(this)));
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    await_completion_.BlockUntilNotified();
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return query_url_success_;
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddHistory(const GURL& url, base::Time time) {
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    history_service_->AddPage(url, time, NULL, 0, GURL(),
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        history::RedirectList(), content::PAGE_TRANSITION_LINK,
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        history::SOURCE_BROWSED, false);
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Callback for HistoryService::QueryURL.
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SaveResultAndQuit(HistoryService::Handle,
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         bool success,
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const history::URLRow*,
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         history::VisitVector*) {
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    query_url_success_ = success;
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    await_completion_.Notify();
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // For History requests.
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CancelableRequestConsumer consumer_;
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool query_url_success_;
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TestingProfile owns the history service; we shouldn't delete it.
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HistoryService* history_service_;
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AwaitCompletionHelper await_completion_;
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(RemoveHistoryTester);
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class RemoveAutofillTester : public autofill::PersonalDataManagerObserver {
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit RemoveAutofillTester(TestingProfile* profile)
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : personal_data_manager_(
448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            autofill::PersonalDataManagerFactory::GetForProfile(profile)) {
449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        autofill::test::DisableSystemServices(profile);
4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    personal_data_manager_->AddObserver(this);
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~RemoveAutofillTester() {
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    personal_data_manager_->RemoveObserver(this);
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if there are autofill profiles.
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool HasProfile() {
4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return !personal_data_manager_->GetProfiles().empty() &&
460c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           !personal_data_manager_->GetCreditCards().empty();
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
46390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  bool HasOrigin(const std::string& origin) {
46490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    const std::vector<autofill::AutofillProfile*>& profiles =
46590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        personal_data_manager_->GetProfiles();
46690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    for (std::vector<autofill::AutofillProfile*>::const_iterator it =
46790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)             profiles.begin();
46890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)         it != profiles.end(); ++it) {
46990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      if ((*it)->origin() == origin)
47090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        return true;
47190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    }
47290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
47390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    const std::vector<autofill::CreditCard*>& credit_cards =
47490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        personal_data_manager_->GetCreditCards();
47590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    for (std::vector<autofill::CreditCard*>::const_iterator it =
47690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)             credit_cards.begin();
47790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)         it != credit_cards.end(); ++it) {
47890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      if ((*it)->origin() == origin)
47990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        return true;
48090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    }
48190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
48290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    return false;
48390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
48490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
48590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Add two profiles and two credit cards to the database.  In each pair, one
48690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // entry has a web origin and the other has a Chrome origin.
48790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void AddProfilesAndCards() {
48890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    std::vector<autofill::AutofillProfile> profiles;
489c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    autofill::AutofillProfile profile;
49090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    profile.set_guid(base::GenerateGUID());
49190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    profile.set_origin(kWebOrigin);
492c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    profile.SetRawInfo(autofill::NAME_FIRST, ASCIIToUTF16("Bob"));
493c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    profile.SetRawInfo(autofill::NAME_LAST, ASCIIToUTF16("Smith"));
494c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    profile.SetRawInfo(autofill::ADDRESS_HOME_ZIP, ASCIIToUTF16("94043"));
495c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    profile.SetRawInfo(autofill::EMAIL_ADDRESS,
496c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       ASCIIToUTF16("sue@example.com"));
497c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    profile.SetRawInfo(autofill::COMPANY_NAME, ASCIIToUTF16("Company X"));
49890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    profiles.push_back(profile);
499c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
50090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    profile.set_guid(base::GenerateGUID());
50190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    profile.set_origin(kChromeOrigin);
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profiles.push_back(profile);
50390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    personal_data_manager_->SetProfiles(&profiles);
50590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    base::MessageLoop::current()->Run();
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
50790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    std::vector<autofill::CreditCard> cards;
508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    autofill::CreditCard card;
50990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    card.set_guid(base::GenerateGUID());
51090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    card.set_origin(kWebOrigin);
511c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    card.SetRawInfo(autofill::CREDIT_CARD_NUMBER,
512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    ASCIIToUTF16("1234-5678-9012-3456"));
51390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    cards.push_back(card);
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
51590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    card.set_guid(base::GenerateGUID());
51690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    card.set_origin(kChromeOrigin);
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cards.push_back(card);
51890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    personal_data_manager_->SetCreditCards(&cards);
52090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    base::MessageLoop::current()->Run();
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnPersonalDataChanged() OVERRIDE {
52590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    base::MessageLoop::current()->Quit();
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
528c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  autofill::PersonalDataManager* personal_data_manager_;
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(RemoveAutofillTester);
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RemoveLocalStorageTester {
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit RemoveLocalStorageTester(TestingProfile* profile)
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : profile_(profile), dom_storage_context_(NULL) {
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dom_storage_context_ =
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        content::BrowserContext::GetDefaultStoragePartition(profile)->
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetDOMStorageContext();
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true, if the given origin URL exists.
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool DOMStorageExistsForOrigin(const GURL& origin) {
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GetLocalStorageUsage();
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    await_completion_.BlockUntilNotified();
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (size_t i = 0; i < infos_.size(); ++i) {
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (origin == infos_[i].origin)
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return true;
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddDOMStorageTestData() {
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Note: This test depends on details of how the dom_storage library
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // stores data in the host file system.
5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath storage_path =
5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        profile_->GetPath().AppendASCII("Local Storage");
557a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    base::CreateDirectory(storage_path);
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Write some files.
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file_util::WriteFile(storage_path.Append(kDomStorageOrigin1), NULL, 0);
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file_util::WriteFile(storage_path.Append(kDomStorageOrigin2), NULL, 0);
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file_util::WriteFile(storage_path.Append(kDomStorageOrigin3), NULL, 0);
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file_util::WriteFile(storage_path.Append(kDomStorageExt), NULL, 0);
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Tweak their dates.
566a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    base::Time now = base::Time::Now();
567a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    base::TouchFile(storage_path.Append(kDomStorageOrigin1), now, now);
568a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
569a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    base::Time one_day_ago = now - base::TimeDelta::FromDays(1);
570a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    base::TouchFile(storage_path.Append(kDomStorageOrigin2),
571a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                    one_day_ago, one_day_ago);
572a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
573a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    base::Time sixty_days_ago = now - base::TimeDelta::FromDays(60);
574a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    base::TouchFile(storage_path.Append(kDomStorageOrigin3),
575a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                    sixty_days_ago, sixty_days_ago);
576a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
577a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    base::TouchFile(storage_path.Append(kDomStorageExt), now, now);
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void GetLocalStorageUsage() {
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dom_storage_context_->GetLocalStorageUsage(
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&RemoveLocalStorageTester::OnGotLocalStorageUsage,
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   base::Unretained(this)));
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnGotLocalStorageUsage(
587bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch      const std::vector<content::LocalStorageUsageInfo>& infos) {
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    infos_ = infos;
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    await_completion_.Notify();
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We don't own these pointers.
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestingProfile* profile_;
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::DOMStorageContext* dom_storage_context_;
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
596bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  std::vector<content::LocalStorageUsageInfo> infos_;
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AwaitCompletionHelper await_completion_;
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(RemoveLocalStorageTester);
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Class ----------------------------------------------------------------
6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowsingDataRemoverTest : public testing::Test,
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                public content::NotificationObserver {
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowsingDataRemoverTest()
609eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      : profile_(new TestingProfile()) {
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    registrar_.Add(this, chrome::NOTIFICATION_BROWSING_DATA_REMOVED,
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   content::Source<Profile>(profile_.get()));
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~BrowsingDataRemoverTest() {
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void TearDown() {
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // TestingProfile contains a DOMStorageContext.  BrowserContext's destructor
6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // posts a message to the WEBKIT thread to delete some of its member
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // variables. We need to ensure that the profile is destroyed, and that
6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // the message loop is cleared out, before destroying the threads and loop.
6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Otherwise we leak memory.
6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profile_.reset();
624eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    base::MessageLoop::current()->RunUntilIdle();
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void BlockUntilBrowsingDataRemoved(BrowsingDataRemover::TimePeriod period,
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     int remove_mask,
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     bool include_protected_origins) {
6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BrowsingDataRemover* remover = BrowsingDataRemover::CreateForPeriod(
6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        profile_.get(), period);
632f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
633f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    TestStoragePartition storage_partition;
634f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    remover->OverrideStoragePartitionForTesting(&storage_partition);
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AwaitCompletionHelper await_completion;
6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    remover->AddObserver(&await_completion);
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    called_with_details_.reset(new BrowsingDataRemover::NotificationDetails());
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // BrowsingDataRemover deletes itself when it completes.
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int origin_set_mask = BrowsingDataHelper::UNPROTECTED_WEB;
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (include_protected_origins)
6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      origin_set_mask |= BrowsingDataHelper::PROTECTED_WEB;
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    remover->Remove(remove_mask, origin_set_mask);
6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    await_completion.BlockUntilNotified();
647f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
648f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Save so we can verify later.
649f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_removal_data_ =
650f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        storage_partition.GetStoragePartitionRemovalData();
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void BlockUntilOriginDataRemoved(BrowsingDataRemover::TimePeriod period,
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   int remove_mask,
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   const GURL& remove_origin) {
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BrowsingDataRemover* remover = BrowsingDataRemover::CreateForPeriod(
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        profile_.get(), period);
658f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    TestStoragePartition storage_partition;
659f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    remover->OverrideStoragePartitionForTesting(&storage_partition);
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AwaitCompletionHelper await_completion;
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    remover->AddObserver(&await_completion);
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    called_with_details_.reset(new BrowsingDataRemover::NotificationDetails());
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // BrowsingDataRemover deletes itself when it completes.
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    remover->RemoveImpl(remove_mask, remove_origin,
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        BrowsingDataHelper::UNPROTECTED_WEB);
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    await_completion.BlockUntilNotified();
670f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
671f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Save so we can verify later.
672f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    storage_partition_removal_data_ =
673f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        storage_partition.GetStoragePartitionRemovalData();
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestingProfile* GetProfile() {
6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return profile_.get();
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time GetBeginTime() {
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return called_with_details_->removal_begin;
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int GetRemovalMask() {
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return called_with_details_->removal_mask;
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int GetOriginSetMask() {
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return called_with_details_->origin_set_mask;
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
692f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData GetStoragePartitionRemovalData() {
693f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return storage_partition_removal_data_;
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // content::NotificationObserver implementation.
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Observe(int type,
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const content::NotificationSource& source,
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const content::NotificationDetails& details) OVERRIDE {
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DCHECK_EQ(type, chrome::NOTIFICATION_BROWSING_DATA_REMOVED);
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // We're not taking ownership of the details object, but storing a copy of
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // it locally.
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    called_with_details_.reset(new BrowsingDataRemover::NotificationDetails(
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        *content::Details<BrowsingDataRemover::NotificationDetails>(
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            details).ptr()));
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    registrar_.RemoveAll();
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<BrowsingDataRemover::NotificationDetails> called_with_details_;
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::NotificationRegistrar registrar_;
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::TestBrowserThreadBundle thread_bundle_;
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestingProfile> profile_;
717f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
718f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData storage_partition_removal_data_;
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(BrowsingDataRemoverTest);
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests ---------------------------------------------------------------------
7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveCookieForever) {
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
727f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_COOKIES,
728f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                false);
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask());
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
732f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
733f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Verify that storage partition was instructed to remove the cookies.
734f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
735f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_mask,
736f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
737f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_COOKIES));
738f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.quota_storage_remove_mask,
739f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
740f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL));
741f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.remove_origin.is_empty());
742f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_begin, GetBeginTime());
7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveCookieLastHour) {
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_HOUR,
747f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_COOKIES,
748f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                false);
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask());
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
752f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
753f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Verify that storage partition was instructed to remove the cookies.
754f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
755f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_mask,
756f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
757f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_COOKIES));
758f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Removing with time period other than EVERYTHING should not clear
759f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // persistent storage data.
760f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.quota_storage_remove_mask,
761f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
762f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL &
763f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                ~StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT));
764f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.remove_origin.is_empty());
765f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_begin, GetBeginTime());
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(FULL_SAFE_BROWSING) || defined(MOBILE_SAFE_BROWSING)
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveSafeBrowsingCookieForever) {
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RemoveSafeBrowsingCookieTester tester;
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tester.AddCookie();
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(tester.ContainsCookie());
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_COOKIES, false);
7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask());
7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(tester.ContainsCookie());
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveSafeBrowsingCookieLastHour) {
7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RemoveSafeBrowsingCookieTester tester;
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tester.AddCookie();
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(tester.ContainsCookie());
7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_HOUR,
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_COOKIES, false);
7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask());
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Removing with time period other than EVERYTHING should not clear safe
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // browsing cookies.
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(tester.ContainsCookie());
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveServerBoundCertForever) {
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RemoveServerBoundCertTester tester(GetProfile());
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tester.AddServerBoundCert(kTestOrigin1);
8042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(0, tester.ssl_config_changed_count());
8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1, tester.ServerBoundCertCount());
8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_SERVER_BOUND_CERTS, false);
8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_SERVER_BOUND_CERTS, GetRemovalMask());
8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
8122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, tester.ssl_config_changed_count());
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0, tester.ServerBoundCertCount());
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveServerBoundCertLastHour) {
8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RemoveServerBoundCertTester tester(GetProfile());
8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time now = base::Time::Now();
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tester.AddServerBoundCert(kTestOrigin1);
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tester.AddServerBoundCertWithTimes(kTestOrigin2,
8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     now - base::TimeDelta::FromHours(2),
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     now);
8242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(0, tester.ssl_config_changed_count());
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(2, tester.ServerBoundCertCount());
8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_HOUR,
8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_SERVER_BOUND_CERTS, false);
8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_SERVER_BOUND_CERTS, GetRemovalMask());
8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
8322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, tester.ssl_config_changed_count());
8332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, tester.ServerBoundCertCount());
8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::ServerBoundCertStore::ServerBoundCertList certs;
8352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  tester.GetCertList(&certs);
8362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1U, certs.size());
8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(kTestOrigin2, certs.front().server_identifier());
8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveUnprotectedLocalStorageForever) {
8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Protect kOrigin1.
8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy =
8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new MockExtensionSpecialStoragePolicy;
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mock_policy->AddProtected(kOrigin1.GetOrigin());
845868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  GetProfile()->SetExtensionSpecialStoragePolicy(mock_policy.get());
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
848f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_LOCAL_STORAGE,
849f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                false);
8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_LOCAL_STORAGE, GetRemovalMask());
8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
853f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
854f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Verify that storage partition was instructed to remove the data correctly.
855f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
856f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_mask,
857f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
858f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE));
859f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.quota_storage_remove_mask,
860f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
861f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL));
862f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.remove_origin.is_empty());
863f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_begin, GetBeginTime());
864f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
865f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Check origin matcher.
866f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(removal_data.origin_matcher.Run(kOrigin1, mock_policy));
867f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy));
868f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy));
869f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(removal_data.origin_matcher.Run(kOriginExt, mock_policy));
8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveProtectedLocalStorageForever) {
8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Protect kOrigin1.
8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy =
8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new MockExtensionSpecialStoragePolicy;
8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mock_policy->AddProtected(kOrigin1.GetOrigin());
877868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  GetProfile()->SetExtensionSpecialStoragePolicy(mock_policy.get());
8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
880f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_LOCAL_STORAGE,
881f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                true);
8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_LOCAL_STORAGE, GetRemovalMask());
884f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB |
885f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            BrowsingDataHelper::PROTECTED_WEB, GetOriginSetMask());
886f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
887f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Verify that storage partition was instructed to remove the data correctly.
888f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
889f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_mask,
890f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
891f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE));
892f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.quota_storage_remove_mask,
893f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
894f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL));
895f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.remove_origin.is_empty());
896f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_begin, GetBeginTime());
897f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
898f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Check origin matcher all http origin will match since we specified
899f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // both protected and unprotected.
900f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin1, mock_policy));
901f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy));
902f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy));
903f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(removal_data.origin_matcher.Run(kOriginExt, mock_policy));
9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveLocalStorageForLastWeek) {
907f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy =
908f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      new MockExtensionSpecialStoragePolicy;
909f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  GetProfile()->SetExtensionSpecialStoragePolicy(mock_policy.get());
9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_WEEK,
912f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_LOCAL_STORAGE,
913f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                false);
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_LOCAL_STORAGE, GetRemovalMask());
9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
917f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
918f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Verify that storage partition was instructed to remove the data correctly.
919f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
920f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_mask,
921f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
922f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE));
923f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Persistent storage won't be deleted.
924f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.quota_storage_remove_mask,
925f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
926f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL &
927f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                ~StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT));
928f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.remove_origin.is_empty());
929f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_begin, GetBeginTime());
930f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
931f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Check origin matcher.
932f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin1, mock_policy));
933f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy));
934f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy));
935f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(removal_data.origin_matcher.Run(kOriginExt, mock_policy));
9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveHistoryForever) {
939bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  RemoveHistoryTester tester;
940bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  ASSERT_TRUE(tester.Init(GetProfile()));
9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tester.AddHistory(kOrigin1, base::Time::Now());
9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(tester.HistoryContainsURL(kOrigin1));
9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_HISTORY, false);
9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask());
9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(tester.HistoryContainsURL(kOrigin1));
9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveHistoryForLastHour) {
954bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  RemoveHistoryTester tester;
955bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  ASSERT_TRUE(tester.Init(GetProfile()));
9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time two_hours_ago = base::Time::Now() - base::TimeDelta::FromHours(2);
9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tester.AddHistory(kOrigin1, base::Time::Now());
9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tester.AddHistory(kOrigin2, two_hours_ago);
9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(tester.HistoryContainsURL(kOrigin1));
9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(tester.HistoryContainsURL(kOrigin2));
9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_HOUR,
9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_HISTORY, false);
9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask());
9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(tester.HistoryContainsURL(kOrigin1));
9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(tester.HistoryContainsURL(kOrigin2));
9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This should crash (DCHECK) in Debug, but death tests don't work properly
9742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// here.
9752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON)
9762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveHistoryProhibited) {
977bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  RemoveHistoryTester tester;
978bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  ASSERT_TRUE(tester.Init(GetProfile()));
9792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PrefService* prefs = GetProfile()->GetPrefs();
9802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  prefs->SetBoolean(prefs::kAllowDeletingBrowserHistory, false);
9812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
9822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Time two_hours_ago = base::Time::Now() - base::TimeDelta::FromHours(2);
9832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
9842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  tester.AddHistory(kOrigin1, base::Time::Now());
9852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  tester.AddHistory(kOrigin2, two_hours_ago);
9862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(tester.HistoryContainsURL(kOrigin1));
9872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(tester.HistoryContainsURL(kOrigin2));
9882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
9892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_HOUR,
9902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      BrowsingDataRemover::REMOVE_HISTORY, false);
9912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask());
9922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
9932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
9942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Nothing should have been deleted.
9952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(tester.HistoryContainsURL(kOrigin1));
9962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(tester.HistoryContainsURL(kOrigin2));
9972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
9982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
9992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveMultipleTypes) {
10012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Add some history.
1002bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  RemoveHistoryTester history_tester;
1003bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  ASSERT_TRUE(history_tester.Init(GetProfile()));
10042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  history_tester.AddHistory(kOrigin1, base::Time::Now());
10052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(history_tester.HistoryContainsURL(kOrigin1));
10062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int removal_mask = BrowsingDataRemover::REMOVE_HISTORY |
10082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     BrowsingDataRemover::REMOVE_COOKIES;
10092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
10112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      removal_mask, false);
10122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(removal_mask, GetRemovalMask());
10142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
10152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(history_tester.HistoryContainsURL(kOrigin1));
1016f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1017f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // The cookie would be deleted throught the StorageParition, check if the
1018f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // partition was requested to remove cookie.
1019f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1020f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_mask,
1021f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1022f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_COOKIES));
1023f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.quota_storage_remove_mask,
1024f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1025f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL));
10262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
10272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This should crash (DCHECK) in Debug, but death tests don't work properly
10292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// here.
10302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON)
10312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveMultipleTypesHistoryProhibited) {
10322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PrefService* prefs = GetProfile()->GetPrefs();
10332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  prefs->SetBoolean(prefs::kAllowDeletingBrowserHistory, false);
10342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Add some history.
1036bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  RemoveHistoryTester history_tester;
1037bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  ASSERT_TRUE(history_tester.Init(GetProfile()));
10382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  history_tester.AddHistory(kOrigin1, base::Time::Now());
10392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(history_tester.HistoryContainsURL(kOrigin1));
10402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int removal_mask = BrowsingDataRemover::REMOVE_HISTORY |
10422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     BrowsingDataRemover::REMOVE_COOKIES;
10432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_HOUR,
10452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                removal_mask, false);
10462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(removal_mask, GetRemovalMask());
10472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
10482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1049f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // 1/2. History should remain.
10502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(history_tester.HistoryContainsURL(kOrigin1));
10512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1052f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // 2/2. The cookie(s) would be deleted throught the StorageParition, check if
1053f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // the partition was requested to remove cookie.
1054f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1055f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_mask,
1056f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1057f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_COOKIES));
1058f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Persistent storage won't be deleted, since EVERYTHING was not specified.
1059f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.quota_storage_remove_mask,
1060f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1061f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL &
1062f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                ~StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT));
10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1064f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif
10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForeverBoth) {
10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1068f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1069f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_WEBSQL |
1070f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_APPCACHE |
1071f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_INDEXEDDB,
1072f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                false);
10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_WEBSQL |
10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_APPCACHE |
10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1079f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1080f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Verify storage partition related stuffs.
1081f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1082f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_mask,
1083f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1084f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1085f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1086f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1087f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_INDEXEDDB));
1088f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.quota_storage_remove_mask,
1089f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1090f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL));
1091f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.remove_origin.is_empty());
10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForeverOnlyTemporary) {
1095f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy =
1096f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      new MockExtensionSpecialStoragePolicy;
1097f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  GetProfile()->SetExtensionSpecialStoragePolicy(mock_policy.get());
1098f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_WEBSQL |
1102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_APPCACHE |
1103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_INDEXEDDB,
1104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                false);
11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_WEBSQL |
11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_APPCACHE |
11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Verify storage partition related stuffs.
1113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_mask,
1116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_INDEXEDDB));
1121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.quota_storage_remove_mask,
1122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL));
1124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.remove_origin.is_empty());
1125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Check that all related origin data would be removed, that is, origin
1127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // matcher would match these origin.
1128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin1, mock_policy));
1129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy));
1130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy));
11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForeverOnlyPersistent) {
1134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy =
1135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      new MockExtensionSpecialStoragePolicy;
1136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  GetProfile()->SetExtensionSpecialStoragePolicy(mock_policy.get());
1137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_WEBSQL |
1141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_APPCACHE |
1142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_INDEXEDDB,
1143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                false);
11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_WEBSQL |
11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_APPCACHE |
11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Verify storage partition related stuffs.
1152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_mask,
1155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_INDEXEDDB));
1160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.quota_storage_remove_mask,
1161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL));
1163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.remove_origin.is_empty());
1164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Check that all related origin data would be removed, that is, origin
1166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // matcher would match these origin.
1167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin1, mock_policy));
1168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy));
1169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy));
11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForeverNeither) {
1173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy =
1174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      new MockExtensionSpecialStoragePolicy;
1175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  GetProfile()->SetExtensionSpecialStoragePolicy(mock_policy.get());
1176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_WEBSQL |
1181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_APPCACHE |
1182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_INDEXEDDB,
1183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                false);
11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_WEBSQL |
11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_APPCACHE |
11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Verify storage partition related stuffs.
1192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_mask,
1195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_INDEXEDDB));
1200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.quota_storage_remove_mask,
1201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL));
1203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.remove_origin.is_empty());
1204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Check that all related origin data would be removed, that is, origin
1206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // matcher would match these origin.
1207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin1, mock_policy));
1208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy));
1209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy));
12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForeverSpecificOrigin) {
12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Remove Origin 1.
12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilOriginDataRemoved(BrowsingDataRemover::EVERYTHING,
1215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                              BrowsingDataRemover::REMOVE_APPCACHE |
1216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                              BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                              BrowsingDataRemover::REMOVE_INDEXEDDB |
1218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                              BrowsingDataRemover::REMOVE_WEBSQL,
1219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                              kOrigin1);
12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_APPCACHE |
12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_INDEXEDDB |
12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_WEBSQL, GetRemovalMask());
12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Verify storage partition related stuffs.
1228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_mask,
1231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_INDEXEDDB));
1236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.quota_storage_remove_mask,
1237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL));
1239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_origin, kOrigin1);
12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForLastHour) {
12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_HOUR,
1244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_WEBSQL |
1246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_APPCACHE |
1247f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_INDEXEDDB,
1248f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                false);
12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_WEBSQL |
12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_APPCACHE |
12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Verify storage partition related stuffs.
1257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_mask,
1260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_INDEXEDDB));
1265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Persistent data would be left out since we are not removing from
1267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // beginning of time.
1268f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  uint32 expected_quota_mask =
1269f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      ~StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT;
1270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.quota_storage_remove_mask, expected_quota_mask);
1271f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.remove_origin.is_empty());
1272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Check removal begin time.
1273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_begin, GetBeginTime());
12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForLastWeek) {
12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_WEEK,
1278f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1279f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_WEBSQL |
1280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_APPCACHE |
1281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_INDEXEDDB,
1282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                false);
12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_WEBSQL |
12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_APPCACHE |
12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1289f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Verify storage partition related stuffs.
1291f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1292f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1293f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_mask,
1294f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1295f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1296f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1297f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1298f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_INDEXEDDB));
1299f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Persistent data would be left out since we are not removing from
1301f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // beginning of time.
1302f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  uint32 expected_quota_mask =
1303f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      ~StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT;
1304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.quota_storage_remove_mask, expected_quota_mask);
1305f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.remove_origin.is_empty());
1306f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Check removal begin time.
1307f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_begin, GetBeginTime());
13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedUnprotectedOrigins) {
13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Protect kOrigin1.
13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy =
13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new MockExtensionSpecialStoragePolicy;
13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mock_policy->AddProtected(kOrigin1.GetOrigin());
1315868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  GetProfile()->SetExtensionSpecialStoragePolicy(mock_policy.get());
13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1318f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1319f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_WEBSQL |
1320f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_APPCACHE |
1321f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_INDEXEDDB,
1322f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                false);
13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_WEBSQL |
13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_APPCACHE |
13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1329f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1330f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Verify storage partition related stuffs.
1331f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1332f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1333f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_mask,
1334f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1335f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1336f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1337f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1338f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_INDEXEDDB));
1339f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.quota_storage_remove_mask,
1340f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1341f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL));
1342f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.remove_origin.is_empty());
1343f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1344f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Check OriginMatcherFunction, |kOrigin1| would not match mask since it
1345f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // is protected.
1346f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(removal_data.origin_matcher.Run(kOrigin1, mock_policy));
1347f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy));
1348f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy));
13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedProtectedSpecificOrigin) {
13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Protect kOrigin1.
13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy =
13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new MockExtensionSpecialStoragePolicy;
13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mock_policy->AddProtected(kOrigin1.GetOrigin());
1356868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  GetProfile()->SetExtensionSpecialStoragePolicy(mock_policy.get());
13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try to remove kOrigin1. Expect failure.
13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilOriginDataRemoved(BrowsingDataRemover::EVERYTHING,
1360f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                              BrowsingDataRemover::REMOVE_APPCACHE |
1361f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                              BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1362f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                              BrowsingDataRemover::REMOVE_INDEXEDDB |
1363f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                              BrowsingDataRemover::REMOVE_WEBSQL,
1364f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                              kOrigin1);
13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_APPCACHE |
13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_INDEXEDDB |
13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_WEBSQL, GetRemovalMask());
13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1371f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1372f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Verify storage partition related stuffs.
1373f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1374f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1375f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_mask,
1376f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1377f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1378f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1379f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1380f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_INDEXEDDB));
1381f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.quota_storage_remove_mask,
1382f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1383f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL));
1384f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_origin, kOrigin1);
1385f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1386f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Check OriginMatcherFunction, |kOrigin1| would not match mask since it
1387f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // is protected.
1388f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(removal_data.origin_matcher.Run(kOrigin1, mock_policy));
1389f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy));
1390f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy));
13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedProtectedOrigins) {
13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Protect kOrigin1.
13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy =
13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new MockExtensionSpecialStoragePolicy;
13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mock_policy->AddProtected(kOrigin1.GetOrigin());
1398868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  GetProfile()->SetExtensionSpecialStoragePolicy(mock_policy.get());
13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try to remove kOrigin1. Expect success.
14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1402f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_APPCACHE |
1403f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1404f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_INDEXEDDB |
1405f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_WEBSQL,
1406f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                true);
14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_APPCACHE |
14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_INDEXEDDB |
14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_WEBSQL, GetRemovalMask());
14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::PROTECTED_WEB |
14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1414f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1415f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Verify storage partition related stuffs.
1416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_mask,
1419f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1420f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1421f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1422f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1423f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_INDEXEDDB));
1424f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.quota_storage_remove_mask,
1425f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1426f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL));
1427f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.remove_origin.is_empty());
1428f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1429f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Check OriginMatcherFunction, |kOrigin1| would match mask since we
1430f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // would have 'protected' specified in origin_set_mask.
1431f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin1, mock_policy));
1432f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy));
1433f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy));
14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedIgnoreExtensionsAndDevTools) {
1437f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy =
1438f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      new MockExtensionSpecialStoragePolicy;
1439f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  GetProfile()->SetExtensionSpecialStoragePolicy(mock_policy.get());
14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1442f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_APPCACHE |
1443f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1444f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_INDEXEDDB |
1445f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                BrowsingDataRemover::REMOVE_WEBSQL,
1446f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                false);
14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_APPCACHE |
14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_INDEXEDDB |
14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_WEBSQL, GetRemovalMask());
14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1454f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Verify storage partition related stuffs.
1455f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1456f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1457f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.remove_mask,
1458f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1459f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1460f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1461f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1462f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::REMOVE_DATA_MASK_INDEXEDDB));
1463f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(removal_data.quota_storage_remove_mask,
1464f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            static_cast<uint32>(
1465f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL));
1466f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removal_data.remove_origin.is_empty());
1467f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1468f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Check that extension and devtools data wouldn't be removed, that is,
1469f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // origin matcher would not match these origin.
1470f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(removal_data.origin_matcher.Run(kOriginExt, mock_policy));
1471f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(removal_data.origin_matcher.Run(kOriginDevTools, mock_policy));
14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, OriginBasedHistoryRemoval) {
1475bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  RemoveHistoryTester tester;
1476bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  ASSERT_TRUE(tester.Init(GetProfile()));
14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time two_hours_ago = base::Time::Now() - base::TimeDelta::FromHours(2);
14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tester.AddHistory(kOrigin1, base::Time::Now());
14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tester.AddHistory(kOrigin2, two_hours_ago);
14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(tester.HistoryContainsURL(kOrigin1));
14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(tester.HistoryContainsURL(kOrigin2));
14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilOriginDataRemoved(BrowsingDataRemover::EVERYTHING,
14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_HISTORY, kOrigin2);
14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask());
14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
14902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
14912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Nothing should have been deleted.
14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(tester.HistoryContainsURL(kOrigin1));
14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(tester.HistoryContainsURL(kOrigin2));
14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, OriginAndTimeBasedHistoryRemoval) {
1497bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  RemoveHistoryTester tester;
1498bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  ASSERT_TRUE(tester.Init(GetProfile()));
14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time two_hours_ago = base::Time::Now() - base::TimeDelta::FromHours(2);
15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tester.AddHistory(kOrigin1, base::Time::Now());
15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tester.AddHistory(kOrigin2, two_hours_ago);
15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(tester.HistoryContainsURL(kOrigin1));
15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(tester.HistoryContainsURL(kOrigin2));
15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilOriginDataRemoved(BrowsingDataRemover::LAST_HOUR,
15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_HISTORY, kOrigin2);
15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask());
15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(tester.HistoryContainsURL(kOrigin1));
15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(tester.HistoryContainsURL(kOrigin2));
15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verify that clearing autofill form data works.
15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, AutofillRemovalLastHour) {
15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetProfile()->CreateWebDataService();
15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RemoveAutofillTester tester(GetProfile());
15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(tester.HasProfile());
152290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  tester.AddProfilesAndCards();
15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(tester.HasProfile());
15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(
15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::LAST_HOUR,
15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_FORM_DATA, false);
15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_FORM_DATA, GetRemovalMask());
15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(tester.HasProfile());
15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, AutofillRemovalEverything) {
15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetProfile()->CreateWebDataService();
15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RemoveAutofillTester tester(GetProfile());
15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(tester.HasProfile());
153990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  tester.AddProfilesAndCards();
15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(tester.HasProfile());
15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(
15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::EVERYTHING,
15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowsingDataRemover::REMOVE_FORM_DATA, false);
15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_FORM_DATA, GetRemovalMask());
15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(tester.HasProfile());
15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
155090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
155190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Verify that clearing autofill form data works.
155290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST_F(BrowsingDataRemoverTest, AutofillOriginsRemovedWithHistory) {
155390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  GetProfile()->CreateWebDataService();
155490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  RemoveAutofillTester tester(GetProfile());
155590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
155690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  tester.AddProfilesAndCards();
155790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_FALSE(tester.HasOrigin(std::string()));
155890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_TRUE(tester.HasOrigin(kWebOrigin));
155990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_TRUE(tester.HasOrigin(kChromeOrigin));
156090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
156190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  BlockUntilBrowsingDataRemoved(
156290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      BrowsingDataRemover::LAST_HOUR,
156390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      BrowsingDataRemover::REMOVE_HISTORY, false);
156490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
156590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask());
156690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
156790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_TRUE(tester.HasOrigin(std::string()));
156890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_FALSE(tester.HasOrigin(kWebOrigin));
156990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_TRUE(tester.HasOrigin(kChromeOrigin));
157090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
15710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
15720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(OS_CHROMEOS)
15730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)TEST_F(BrowsingDataRemoverTest, ContentProtectionPlatformKeysRemoval) {
15740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  chromeos::ScopedTestDeviceSettingsService test_device_settings_service;
15750f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  chromeos::ScopedTestCrosSettings test_cros_settings;
15760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  chromeos::MockUserManager* mock_user_manager =
15770f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      new testing::NiceMock<chromeos::MockUserManager>();
15780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  mock_user_manager->SetActiveUser("test@example.com");
15790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  chromeos::ScopedUserManagerEnabler user_manager_enabler(mock_user_manager);
1580f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1581f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  chromeos::FakeDBusThreadManager* fake_dbus_manager =
1582f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      new chromeos::FakeDBusThreadManager;
15830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  chromeos::MockCryptohomeClient* cryptohome_client =
1584f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      new chromeos::MockCryptohomeClient;
1585f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  fake_dbus_manager->SetCryptohomeClient(
1586f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      scoped_ptr<chromeos::CryptohomeClient>(cryptohome_client));
1587f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  chromeos::DBusThreadManager::InitializeForTesting(fake_dbus_manager);
15880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
15890f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // Expect exactly one call.  No calls means no attempt to delete keys and more
15900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // than one call means a significant performance problem.
15910f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(*cryptohome_client, TpmAttestationDeleteKeys(_, _, _, _))
15920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      .WillOnce(WithArgs<3>(Invoke(FakeDBusCall)));
15930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
15940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BlockUntilBrowsingDataRemoved(
15950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      BrowsingDataRemover::EVERYTHING,
15960f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      BrowsingDataRemover::REMOVE_CONTENT_LICENSES, false);
1597f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1598f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  chromeos::DBusThreadManager::Shutdown();
15990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
16000f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif
1601