1 // Copyright 2014 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.
5 #include "chrome/browser/search_engines/chrome_template_url_service_client.h"
7 #include "chrome/browser/chrome_notification_types.h"
8 #include "chrome/browser/history/history_notifications.h"
9 #include "chrome/browser/history/history_service.h"
10 #include "chrome/browser/history/history_service_factory.h"
11 #include "chrome/browser/profiles/profile.h"
12 #include "components/search_engines/template_url_service.h"
13 #include "content/public/browser/notification_details.h"
14 #include "content/public/browser/notification_source.h"
15 #include "extensions/common/constants.h"
17 ChromeTemplateURLServiceClient::ChromeTemplateURLServiceClient(Profile
* profile
)
22 // Register for notifications.
23 // TODO(sky): bug 1166191. The keywords should be moved into the history
24 // db, which will mean we no longer need this notification and the history
25 // backend can handle automatically adding the search terms as the user
27 content::Source
<Profile
> profile_source(profile
->GetOriginalProfile());
28 notification_registrar_
.Add(this, chrome::NOTIFICATION_HISTORY_URL_VISITED
,
32 ChromeTemplateURLServiceClient::~ChromeTemplateURLServiceClient() {
35 void ChromeTemplateURLServiceClient::SetOwner(TemplateURLService
* owner
) {
40 void ChromeTemplateURLServiceClient::DeleteAllSearchTermsForKeyword(
42 HistoryService
* history_service
=
43 HistoryServiceFactory::GetForProfile(profile_
, Profile::EXPLICIT_ACCESS
);
45 history_service
->DeleteAllSearchTermsForKeyword(id
);
48 void ChromeTemplateURLServiceClient::SetKeywordSearchTermsForURL(
51 const base::string16
& term
) {
52 HistoryService
* history_service
=
53 HistoryServiceFactory::GetForProfile(profile_
, Profile::EXPLICIT_ACCESS
);
55 history_service
->SetKeywordSearchTermsForURL(url
, id
, term
);
58 void ChromeTemplateURLServiceClient::AddKeywordGeneratedVisit(const GURL
& url
) {
59 HistoryService
* history_service
=
60 HistoryServiceFactory::GetForProfile(profile_
, Profile::EXPLICIT_ACCESS
);
62 history_service
->AddPage(url
, base::Time::Now(), NULL
, 0, GURL(),
63 history::RedirectList(),
64 content::PAGE_TRANSITION_KEYWORD_GENERATED
,
65 history::SOURCE_BROWSED
, false);
68 void ChromeTemplateURLServiceClient::RestoreExtensionInfoIfNecessary(
69 TemplateURL
* template_url
) {
70 const TemplateURLData
& data
= template_url
->data();
72 if (url
.SchemeIs(extensions::kExtensionScheme
)) {
73 const std::string
& extension_id
= url
.host();
74 template_url
->set_extension_info(make_scoped_ptr(
75 new TemplateURL::AssociatedExtensionInfo(
76 TemplateURL::OMNIBOX_API_EXTENSION
, extension_id
)));
80 void ChromeTemplateURLServiceClient::Observe(
82 const content::NotificationSource
& source
,
83 const content::NotificationDetails
& details
) {
84 DCHECK_EQ(type
, chrome::NOTIFICATION_HISTORY_URL_VISITED
);
89 content::Details
<history::URLVisitedDetails
> history_details(details
);
90 TemplateURLService::URLVisitedDetails visited_details
;
91 visited_details
.url
= history_details
->row
.url();
92 visited_details
.is_keyword_transition
=
93 content::PageTransitionStripQualifier(history_details
->transition
) ==
94 content::PAGE_TRANSITION_KEYWORD
;
95 owner_
->OnHistoryURLVisited(visited_details
);