172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/file_util.h" 63345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/utf_string_conversions.h" 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/browsing_data_database_helper.h" 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/browsing_data_helper_browsertest.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/in_process_browser_test.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/testing_profile.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/ui_test_utils.h" 12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace { 1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsentypedef BrowsingDataHelperCallback<BrowsingDataDatabaseHelper::DatabaseInfo> 1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TestCompletionCallback; 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenconst char kTestIdentifier1[] = "http_www.google.com_0"; 1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenconst char kTestIdentifierExtension[] = 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "chrome-extension_behllobkkfkfnphdnhnkndlbkcpglgmj_0"; 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass BrowsingDataDatabaseHelperTest : public InProcessBrowserTest { 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void CreateDatabases() { 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch webkit_database::DatabaseTracker* db_tracker = 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch testing_profile_.GetDatabaseTracker(); 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 db_name = ASCIIToUTF16("db"); 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 description = ASCIIToUTF16("db_description"); 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int64 size; 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int64 available; 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 identifier1(UTF8ToUTF16(kTestIdentifier1)); 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch db_tracker->DatabaseOpened(identifier1, db_name, description, 1, &size, 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &available); 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch db_tracker->DatabaseClosed(identifier1, db_name); 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath db_path1 = db_tracker->GetFullDBFilePath(identifier1, db_name); 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch file_util::CreateDirectory(db_path1.DirName()); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(0, file_util::WriteFile(db_path1, NULL, 0)); 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 identifierExtension(UTF8ToUTF16(kTestIdentifierExtension)); 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch db_tracker->DatabaseOpened(identifierExtension, db_name, description, 1, 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &size, &available); 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch db_tracker->DatabaseClosed(identifierExtension, db_name); 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath db_path2 = 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch db_tracker->GetFullDBFilePath(identifierExtension, db_name); 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch file_util::CreateDirectory(db_path2.DirName()); 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(0, file_util::WriteFile(db_path2, NULL, 0)); 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<webkit_database::OriginInfo> origins; 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch db_tracker->GetAllOriginsInfo(&origins); 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(2U, origins.size()); 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestingProfile testing_profile_; 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Called back by BrowsingDataDatabaseHelper on the UI thread once the database 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// information has been retrieved. 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass StopTestOnCallback { 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit StopTestOnCallback( 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BrowsingDataDatabaseHelper* database_helper) 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : database_helper_(database_helper) { 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(database_helper_); 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void Callback(const std::vector<BrowsingDataDatabaseHelper::DatabaseInfo>& 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch database_info_list) { 68731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1UL, database_info_list.size()); 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(std::string(kTestIdentifier1), 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch database_info_list.at(0).origin_identifier); 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Quit(); 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BrowsingDataDatabaseHelper* database_helper_; 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(BrowsingDataDatabaseHelperTest, FetchData) { 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CreateDatabases(); 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowsingDataDatabaseHelper> database_helper( 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new BrowsingDataDatabaseHelper(&testing_profile_)); 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch StopTestOnCallback stop_test_on_callback(database_helper); 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch database_helper->StartFetching( 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NewCallback(&stop_test_on_callback, &StopTestOnCallback::Callback)); 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Blocks until StopTestOnCallback::Callback is notified. 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::RunMessageLoop(); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 8972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 9072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenIN_PROC_BROWSER_TEST_F(BrowsingDataDatabaseHelperTest, CannedAddDatabase) { 9172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const GURL origin1("http://host1:1/"); 9272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const GURL origin2("http://host2:1/"); 9372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const char origin_str1[] = "http_host1_1"; 9472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const char origin_str2[] = "http_host2_1"; 9572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const char db1[] = "db1"; 9672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const char db2[] = "db2"; 9772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const char db3[] = "db3"; 9872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 9972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_refptr<CannedBrowsingDataDatabaseHelper> helper( 10072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new CannedBrowsingDataDatabaseHelper(&testing_profile_)); 10172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen helper->AddDatabase(origin1, db1, ""); 10272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen helper->AddDatabase(origin1, db2, ""); 10372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen helper->AddDatabase(origin2, db3, ""); 10472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 10572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TestCompletionCallback callback; 10672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen helper->StartFetching( 10772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NewCallback(&callback, &TestCompletionCallback::callback)); 10872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 10972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<BrowsingDataDatabaseHelper::DatabaseInfo> result = 11072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen callback.result(); 11172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 11272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_EQ(3u, result.size()); 11372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_STREQ(origin_str1, result[0].origin_identifier.c_str()); 11472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_STREQ(db1, result[0].database_name.c_str()); 11572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_STREQ(origin_str1, result[1].origin_identifier.c_str()); 11672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_STREQ(db2, result[1].database_name.c_str()); 11772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_STREQ(origin_str2, result[2].origin_identifier.c_str()); 11872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_STREQ(db3, result[2].database_name.c_str()); 11972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 12072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 12172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenIN_PROC_BROWSER_TEST_F(BrowsingDataDatabaseHelperTest, CannedUnique) { 12272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const GURL origin("http://host1:1/"); 12372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const char origin_str[] = "http_host1_1"; 12472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const char db[] = "db1"; 12572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 12672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_refptr<CannedBrowsingDataDatabaseHelper> helper( 12772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new CannedBrowsingDataDatabaseHelper(&testing_profile_)); 12872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen helper->AddDatabase(origin, db, ""); 12972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen helper->AddDatabase(origin, db, ""); 13072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 13172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TestCompletionCallback callback; 13272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen helper->StartFetching( 13372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NewCallback(&callback, &TestCompletionCallback::callback)); 13472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 13572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<BrowsingDataDatabaseHelper::DatabaseInfo> result = 13672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen callback.result(); 13772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 13872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_EQ(1u, result.size()); 13972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_STREQ(origin_str, result[0].origin_identifier.c_str()); 14072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_STREQ(db, result[0].database_name.c_str()); 14172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 14272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} // namespace 143