1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/base_switches.h"
6#include "base/command_line.h"
7#include "base/prefs/pref_service.h"
8#include "base/strings/utf_string_conversions.h"
9#include "chrome/browser/extensions/extension_apitest.h"
10#include "chrome/browser/history/history_service.h"
11#include "chrome/browser/history/history_service_factory.h"
12#include "chrome/browser/history/history_types.h"
13#include "chrome/browser/profiles/profile.h"
14#include "chrome/browser/ui/browser.h"
15#include "chrome/common/pref_names.h"
16#include "extensions/common/switches.h"
17#include "net/dns/mock_host_resolver.h"
18#include "url/gurl.h"
19
20namespace extensions {
21
22class HistoryApiTest : public ExtensionApiTest {
23 public:
24  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
25    ExtensionApiTest::SetUpInProcessBrowserTestFixture();
26
27    host_resolver()->AddRule("www.a.com", "127.0.0.1");
28    host_resolver()->AddRule("www.b.com", "127.0.0.1");
29  }
30
31  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
32    ExtensionApiTest::SetUpCommandLine(command_line);
33    command_line->AppendSwitch(switches::kEnableExperimentalExtensionApis);
34  }
35};
36
37// Full text search indexing sometimes exceeds a timeout. (http://crbug/119505)
38IN_PROC_BROWSER_TEST_F(HistoryApiTest, DISABLED_MiscSearch) {
39  ASSERT_TRUE(StartEmbeddedTestServer());
40  ASSERT_TRUE(RunExtensionSubtest("history", "misc_search.html")) << message_;
41}
42
43// Same could happen here without the FTS (http://crbug/119505)
44IN_PROC_BROWSER_TEST_F(HistoryApiTest, DISABLED_TimedSearch) {
45  ASSERT_TRUE(StartEmbeddedTestServer());
46  ASSERT_TRUE(RunExtensionSubtest("history", "timed_search.html")) << message_;
47}
48
49#if defined(OS_WIN)
50// Flaky on Windows: crbug.com/88318
51#define MAYBE_Delete DISABLED_Delete
52#else
53#define MAYBE_Delete Delete
54#endif
55IN_PROC_BROWSER_TEST_F(HistoryApiTest, MAYBE_Delete) {
56  ASSERT_TRUE(StartEmbeddedTestServer());
57  ASSERT_TRUE(RunExtensionSubtest("history", "delete.html")) << message_;
58}
59
60IN_PROC_BROWSER_TEST_F(HistoryApiTest, DeleteProhibited) {
61  browser()->profile()->GetPrefs()->
62      SetBoolean(prefs::kAllowDeletingBrowserHistory, false);
63  ASSERT_TRUE(StartEmbeddedTestServer());
64  ASSERT_TRUE(RunExtensionSubtest("history", "delete_prohibited.html")) <<
65      message_;
66}
67
68// See crbug.com/79074
69IN_PROC_BROWSER_TEST_F(HistoryApiTest, DISABLED_GetVisits) {
70  ASSERT_TRUE(StartEmbeddedTestServer());
71  ASSERT_TRUE(RunExtensionSubtest("history", "get_visits.html")) << message_;
72}
73
74#if defined(OS_WIN)
75// Searching for a URL right after adding it fails on win XP.
76// Fix this as part of crbug/76170.
77#define MAYBE_SearchAfterAdd DISABLED_SearchAfterAdd
78#else
79#define MAYBE_SearchAfterAdd SearchAfterAdd
80#endif
81
82IN_PROC_BROWSER_TEST_F(HistoryApiTest, MAYBE_SearchAfterAdd) {
83  ASSERT_TRUE(StartEmbeddedTestServer());
84  ASSERT_TRUE(RunExtensionSubtest("history", "search_after_add.html"))
85      << message_;
86}
87
88IN_PROC_BROWSER_TEST_F(HistoryApiTest, MostVisited) {
89  ASSERT_TRUE(StartEmbeddedTestServer());
90
91  // Add entries to the history database that we can query for (using the
92  // extension history API for this doesn't work as it only adds URLs with
93  // LINK transition type).
94  HistoryService* hs = HistoryServiceFactory::GetForProfile(
95      browser()->profile(),
96      Profile::EXPLICIT_ACCESS);
97
98  GURL google_url = GURL("http://www.google.com");
99  base::Time google_time;
100  ASSERT_TRUE(base::Time::FromString("Tue, 24 Apr 2012, 13:00:00",
101                                     &google_time));
102  hs->AddPage(google_url, google_time, NULL, 0, GURL(), history::RedirectList(),
103              content::PAGE_TRANSITION_TYPED, history::SOURCE_EXTENSION, false);
104  hs->SetPageTitle(google_url, UTF8ToUTF16("Google"));
105
106  GURL picasa_url = GURL("http://www.picasa.com");
107  base::Time picasa_time;
108  ASSERT_TRUE(base::Time::FromString("Tue, 24 Apr 2012, 14:00:00",
109                                     &picasa_time));
110  hs->AddPage(picasa_url, picasa_time, NULL, 0, GURL(), history::RedirectList(),
111              content::PAGE_TRANSITION_TYPED, history::SOURCE_EXTENSION, false);
112  hs->SetPageTitle(picasa_url, UTF8ToUTF16("Picasa"));
113
114  // Run the test.
115  ASSERT_TRUE(RunExtensionSubtest("history", "most_visited.html"))
116    << message_;
117}
118
119}  // namespace extensions
120