1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 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
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/browsing_data_appcache_helper.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/stl_util-inl.h"
8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/test/testing_browser_process_test.h"
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/testing_profile.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass TestCompletionCallback {
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestCompletionCallback()
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      : have_result_(false) {
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool have_result() const { return have_result_; }
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  void callback() {
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    have_result_ = true;
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool have_result_;
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
31dc0f95d653279beabeb9817299e2902918ba123eKristian Monsentypedef TestingBrowserProcessTest CannedBrowsingDataAppCacheHelperTest;
32dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
33dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(CannedBrowsingDataAppCacheHelperTest, SetInfo) {
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestingProfile profile;
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GURL manifest1("http://example1.com/manifest.xml");
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GURL manifest2("http://example2.com/path1/manifest.xml");
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GURL manifest3("http://example2.com/path2/manifest.xml");
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
40513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_refptr<CannedBrowsingDataAppCacheHelper> helper(
41513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      new CannedBrowsingDataAppCacheHelper(&profile));
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  helper->AddAppCache(manifest1);
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  helper->AddAppCache(manifest2);
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  helper->AddAppCache(manifest3);
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestCompletionCallback callback;
473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  helper->StartFetching(
483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      NewCallback(&callback, &TestCompletionCallback::callback));
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(callback.have_result());
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::map<GURL, appcache::AppCacheInfoVector>& collection =
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      helper->info_collection()->infos_by_origin;
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(2u, collection.size());
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(ContainsKey(collection, manifest1.GetOrigin()));
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(1u, collection[manifest1.GetOrigin()].size());
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(manifest1, collection[manifest1.GetOrigin()].at(0).manifest_url);
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(ContainsKey(collection, manifest2.GetOrigin()));
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(2u, collection[manifest2.GetOrigin()].size());
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::set<GURL> manifest_results;
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  manifest_results.insert(collection[manifest2.GetOrigin()].at(0).manifest_url);
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  manifest_results.insert(collection[manifest2.GetOrigin()].at(1).manifest_url);
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(ContainsKey(manifest_results, manifest2));
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(ContainsKey(manifest_results, manifest3));
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
68dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(CannedBrowsingDataAppCacheHelperTest, Unique) {
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestingProfile profile;
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GURL manifest("http://example.com/manifest.xml");
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
73513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_refptr<CannedBrowsingDataAppCacheHelper> helper(
74513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      new CannedBrowsingDataAppCacheHelper(&profile));
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  helper->AddAppCache(manifest);
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  helper->AddAppCache(manifest);
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestCompletionCallback callback;
793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  helper->StartFetching(
803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      NewCallback(&callback, &TestCompletionCallback::callback));
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(callback.have_result());
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::map<GURL, appcache::AppCacheInfoVector>& collection =
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      helper->info_collection()->infos_by_origin;
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(1u, collection.size());
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(ContainsKey(collection, manifest.GetOrigin()));
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(1u, collection[manifest.GetOrigin()].size());
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(manifest, collection[manifest.GetOrigin()].at(0).manifest_url);
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
92dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(CannedBrowsingDataAppCacheHelperTest, Empty) {
933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  TestingProfile profile;
943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  GURL manifest("http://example.com/manifest.xml");
963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
97513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_refptr<CannedBrowsingDataAppCacheHelper> helper(
98513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      new CannedBrowsingDataAppCacheHelper(&profile));
993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_TRUE(helper->empty());
1013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  helper->AddAppCache(manifest);
1023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_FALSE(helper->empty());
1033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  helper->Reset();
1043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_TRUE(helper->empty());
1053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
106