1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/autocomplete/network_action_predictor.h"
#include "base/message_loop.h"
#include "base/time.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/autocomplete/autocomplete_match.h"
#include "chrome/browser/history/history.h"
#include "chrome/browser/history/url_database.h"
#include "chrome/test/base/testing_profile.h"
#include "content/browser/browser_thread.h"
#include "testing/gtest/include/gtest/gtest.h"
typedef testing::Test NetworkActionPredictorTest;
TEST_F(NetworkActionPredictorTest, RecommendAction) {
MessageLoop loop(MessageLoop::TYPE_DEFAULT);
BrowserThread ui_thread(BrowserThread::UI, &loop);
BrowserThread file_thread(BrowserThread::FILE, &loop);
TestingProfile profile;
profile.CreateHistoryService(true, false);
profile.BlockUntilHistoryProcessesPendingRequests();
NetworkActionPredictor predictor(&profile);
HistoryService* history = profile.GetHistoryService(Profile::EXPLICIT_ACCESS);
CHECK(history);
history::URLDatabase* url_db = history->InMemoryDatabase();
CHECK(url_db);
struct TestUrlInfo {
GURL url;
string16 title;
int typed_count;
int days_from_now;
string16 user_text;
NetworkActionPredictor::Action expected_action;
} test_url_db[] = {
{ GURL("http://www.testsite.com/a.html"),
ASCIIToUTF16("Test - site - just a test"), 1, 1,
ASCIIToUTF16("just"),
NetworkActionPredictor::ACTION_PRERENDER },
{ GURL("http://www.testsite.com/b.html"),
ASCIIToUTF16("Test - site - just a test"), 0, 1,
ASCIIToUTF16("just"),
NetworkActionPredictor::ACTION_PRERENDER },
{ GURL("http://www.testsite.com/c.html"),
ASCIIToUTF16("Test - site - just a test"), 1, 5,
ASCIIToUTF16("just"),
NetworkActionPredictor::ACTION_PRECONNECT },
{ GURL("http://www.testsite.com/d.html"),
ASCIIToUTF16("Test - site - just a test"), 2, 5,
ASCIIToUTF16("just"),
NetworkActionPredictor::ACTION_PRERENDER },
{ GURL("http://www.testsite.com/e.html"),
ASCIIToUTF16("Test - site - just a test"), 1, 8,
ASCIIToUTF16("just"),
NetworkActionPredictor::ACTION_PRECONNECT },
{ GURL("http://www.testsite.com/f.html"),
ASCIIToUTF16("Test - site - just a test"), 4, 8,
ASCIIToUTF16("just"),
NetworkActionPredictor::ACTION_PRERENDER },
{ GURL("http://www.testsite.com/g.html"),
ASCIIToUTF16("Test - site - just a test"), 1, 12,
ASCIIToUTF16("just a"),
NetworkActionPredictor::ACTION_NONE },
{ GURL("http://www.testsite.com/h.html"),
ASCIIToUTF16("Test - site - just a test"), 2, 21,
ASCIIToUTF16("just a test"),
NetworkActionPredictor::ACTION_NONE },
{ GURL("http://www.testsite.com/i.html"),
ASCIIToUTF16("Test - site - just a test"), 3, 28,
ASCIIToUTF16("just a test"),
NetworkActionPredictor::ACTION_NONE }
};
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_url_db); ++i) {
const base::Time visit_time =
base::Time::Now() - base::TimeDelta::FromDays(
test_url_db[i].days_from_now);
history::URLRow row(test_url_db[i].url);
row.set_title(test_url_db[i].title);
row.set_typed_count(test_url_db[i].typed_count);
row.set_last_visit(visit_time);
CHECK(url_db->AddURL(row));
}
AutocompleteMatch match;
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_url_db); ++i) {
match.destination_url = GURL(test_url_db[i].url);
EXPECT_EQ(test_url_db[i].expected_action,
predictor.RecommendAction(test_url_db[i].user_text, match))
<< "Unexpected action for " << match.destination_url;
}
}
|