blob: b4d97c9590ada881e7a23062fee1d6a4ff652fb1 (
plain)
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
|
// Copyright 2013 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.
#ifndef CHROME_BROWSER_SEARCH_INSTANT_SERVICE_H_
#define CHROME_BROWSER_SEARCH_INSTANT_SERVICE_H_
#include <set>
#include <vector>
#include "base/gtest_prod_util.h"
#include "base/memory/weak_ptr.h"
#include "base/observer_list.h"
#include "chrome/browser/history/history_types.h"
#include "components/keyed_service/core/keyed_service.h"
#include "components/search_engines/template_url_service_observer.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
#include "url/gurl.h"
class InstantIOContext;
struct InstantMostVisitedItem;
class InstantSearchPrerenderer;
class InstantServiceObserver;
class Profile;
struct TemplateURLData;
class TemplateURLService;
struct ThemeBackgroundInfo;
class ThemeService;
namespace content {
class RenderProcessHost;
}
// Tracks render process host IDs that are associated with Instant.
class InstantService : public KeyedService,
public content::NotificationObserver,
public TemplateURLServiceObserver {
public:
explicit InstantService(Profile* profile);
virtual ~InstantService();
// Add, remove, and query RenderProcessHost IDs that are associated with
// Instant processes.
void AddInstantProcess(int process_id);
bool IsInstantProcess(int process_id) const;
// Adds/Removes InstantService observers.
void AddObserver(InstantServiceObserver* observer);
void RemoveObserver(InstantServiceObserver* observer);
#if defined(UNIT_TEST)
int GetInstantProcessCount() const {
return process_ids_.size();
}
#endif
// Most visited item API.
// Invoked by the InstantController when the Instant page wants to delete a
// Most Visited item.
void DeleteMostVisitedItem(const GURL& url);
// Invoked by the InstantController when the Instant page wants to undo the
// blacklist action.
void UndoMostVisitedDeletion(const GURL& url);
// Invoked by the InstantController when the Instant page wants to undo all
// Most Visited deletions.
void UndoAllMostVisitedDeletions();
// Invoked by the InstantController to update theme information for NTP.
//
// TODO(kmadhusu): Invoking this from InstantController shouldn't be
// necessary. Investigate more and remove this from here.
void UpdateThemeInfo();
// Invoked by the InstantController to update most visited items details for
// NTP.
void UpdateMostVisitedItemsInfo();
// Sends the current set of search URLs to a renderer process.
void SendSearchURLsToRenderer(content::RenderProcessHost* rph);
// Invoked to notify the Instant page that the omnibox start margin has
// changed.
void OnOmniboxStartMarginChanged(int start_margin);
InstantSearchPrerenderer* instant_search_prerenderer() {
return instant_prerenderer_.get();
}
int omnibox_start_margin() const { return omnibox_start_margin_; }
private:
friend class InstantExtendedTest;
friend class InstantServiceTest;
friend class InstantTestBase;
friend class InstantUnitTestBase;
FRIEND_TEST_ALL_PREFIXES(InstantExtendedManualTest,
MANUAL_SearchesFromFakebox);
FRIEND_TEST_ALL_PREFIXES(InstantExtendedTest, ProcessIsolation);
FRIEND_TEST_ALL_PREFIXES(InstantServiceEnabledTest,
SendsSearchURLsToRenderer);
// KeyedService:
virtual void Shutdown() OVERRIDE;
// content::NotificationObserver:
virtual void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
// TemplateURLServiceObserver:
// Caches the previous value of the Default Search Provider and the Google
// base URL to filter out changes other than those affecting the Default
// Search Provider.
virtual void OnTemplateURLServiceChanged() OVERRIDE;
// Called when a renderer process is terminated.
void OnRendererProcessTerminated(int process_id);
// Called when we get new most visited items from TopSites, registered as an
// async callback. Parses them and sends them to the renderer via
// SendMostVisitedItems.
void OnMostVisitedItemsReceived(const history::MostVisitedURLList& data);
// Notifies the observer about the last known most visited items.
void NotifyAboutMostVisitedItems();
// Theme changed notification handler.
void OnThemeChanged(ThemeService* theme_service);
void ResetInstantSearchPrerenderer();
Profile* const profile_;
// The TemplateURLService that we are observing. It will outlive this
// InstantService due to the dependency declared in InstantServiceFactory.
TemplateURLService* template_url_service_;
// The process ids associated with Instant processes.
std::set<int> process_ids_;
// InstantMostVisitedItems sent to the Instant Pages.
std::vector<InstantMostVisitedItem> most_visited_items_;
// Theme-related data for NTP overlay to adopt themes.
scoped_ptr<ThemeBackgroundInfo> theme_info_;
// The start-edge margin of the omnibox, used by the Instant page to align
// text or assets properly with the omnibox.
int omnibox_start_margin_;
ObserverList<InstantServiceObserver> observers_;
content::NotificationRegistrar registrar_;
scoped_refptr<InstantIOContext> instant_io_context_;
// Set to NULL if the default search provider does not support Instant.
scoped_ptr<InstantSearchPrerenderer> instant_prerenderer_;
// Used for Top Sites async retrieval.
base::WeakPtrFactory<InstantService> weak_ptr_factory_;
// Used to check whether notifications from TemplateURLService indicate a
// change that affects the default search provider.
scoped_ptr<TemplateURLData> previous_default_search_provider_;
GURL previous_google_base_url_;
DISALLOW_COPY_AND_ASSIGN(InstantService);
};
#endif // CHROME_BROWSER_SEARCH_INSTANT_SERVICE_H_
|