Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Side by Side Diff: chrome/browser/autocomplete/keyword_extensions_delegate_impl.cc

Issue 460313002: No chrome dependencies in KeywordProvider (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rename setter Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/autocomplete/keyword_extensions_delegate_impl.h" 5 #include "chrome/browser/autocomplete/keyword_extensions_delegate_impl.h"
6 6
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "chrome/browser/extensions/api/omnibox/omnibox_api.h" 8 #include "chrome/browser/extensions/api/omnibox/omnibox_api.h"
9 #include "chrome/browser/extensions/extension_service.h" 9 #include "chrome/browser/extensions/extension_service.h"
10 #include "chrome/browser/extensions/extension_util.h" 10 #include "chrome/browser/extensions/extension_util.h"
11 #include "chrome/browser/profiles/profile.h" 11 #include "chrome/browser/profiles/profile.h"
12 #include "content/public/browser/notification_details.h" 12 #include "content/public/browser/notification_details.h"
13 #include "content/public/browser/notification_source.h" 13 #include "content/public/browser/notification_source.h"
14 #include "extensions/browser/extension_system.h" 14 #include "extensions/browser/extension_system.h"
15 #include "extensions/browser/notification_types.h" 15 #include "extensions/browser/notification_types.h"
16 16
17 namespace omnibox_api = extensions::api::omnibox; 17 namespace omnibox_api = extensions::api::omnibox;
18 18
19 int KeywordExtensionsDelegateImpl::global_input_uid_ = 0; 19 int KeywordExtensionsDelegateImpl::global_input_uid_ = 0;
20 20
21 KeywordExtensionsDelegateImpl::KeywordExtensionsDelegateImpl( 21 KeywordExtensionsDelegateImpl::KeywordExtensionsDelegateImpl(
22 Profile* profile,
22 KeywordProvider* provider) 23 KeywordProvider* provider)
23 : KeywordExtensionsDelegate(provider), 24 : KeywordExtensionsDelegate(provider),
25 profile_(profile),
24 provider_(provider) { 26 provider_(provider) {
25 DCHECK(provider_); 27 DCHECK(provider_);
26 28
27 current_input_id_ = 0; 29 current_input_id_ = 0;
28 // Extension suggestions always come from the original profile, since that's 30 // Extension suggestions always come from the original profile, since that's
29 // where extensions run. We use the input ID to distinguish whether the 31 // where extensions run. We use the input ID to distinguish whether the
30 // suggestions are meant for us. 32 // suggestions are meant for us.
31 registrar_.Add(this, 33 registrar_.Add(this,
32 extensions::NOTIFICATION_EXTENSION_OMNIBOX_SUGGESTIONS_READY, 34 extensions::NOTIFICATION_EXTENSION_OMNIBOX_SUGGESTIONS_READY,
33 content::Source<Profile>(profile()->GetOriginalProfile())); 35 content::Source<Profile>(profile_->GetOriginalProfile()));
34 registrar_.Add( 36 registrar_.Add(
35 this, 37 this,
36 extensions::NOTIFICATION_EXTENSION_OMNIBOX_DEFAULT_SUGGESTION_CHANGED, 38 extensions::NOTIFICATION_EXTENSION_OMNIBOX_DEFAULT_SUGGESTION_CHANGED,
37 content::Source<Profile>(profile()->GetOriginalProfile())); 39 content::Source<Profile>(profile_->GetOriginalProfile()));
38 registrar_.Add(this, 40 registrar_.Add(this,
39 extensions::NOTIFICATION_EXTENSION_OMNIBOX_INPUT_ENTERED, 41 extensions::NOTIFICATION_EXTENSION_OMNIBOX_INPUT_ENTERED,
40 content::Source<Profile>(profile())); 42 content::Source<Profile>(profile_));
41 } 43 }
42 44
43 KeywordExtensionsDelegateImpl::~KeywordExtensionsDelegateImpl() { 45 KeywordExtensionsDelegateImpl::~KeywordExtensionsDelegateImpl() {
44 } 46 }
45 47
46 void KeywordExtensionsDelegateImpl::IncrementInputId() { 48 void KeywordExtensionsDelegateImpl::IncrementInputId() {
47 current_input_id_ = ++global_input_uid_; 49 current_input_id_ = ++global_input_uid_;
48 } 50 }
49 51
50 bool KeywordExtensionsDelegateImpl::IsEnabledExtension( 52 bool KeywordExtensionsDelegateImpl::IsEnabledExtension(
51 Profile* profile,
52 const std::string& extension_id) { 53 const std::string& extension_id) {
53 ExtensionService* extension_service = 54 ExtensionService* extension_service =
54 extensions::ExtensionSystem::Get(profile)->extension_service(); 55 extensions::ExtensionSystem::Get(profile_)->extension_service();
55 const extensions::Extension* extension = 56 const extensions::Extension* extension =
56 extension_service->GetExtensionById(extension_id, false); 57 extension_service->GetExtensionById(extension_id, false);
57 return extension && 58 return extension &&
58 (!profile->IsOffTheRecord() || 59 (!profile_->IsOffTheRecord() ||
59 !extensions::util::IsIncognitoEnabled(extension_id, profile)); 60 !extensions::util::IsIncognitoEnabled(extension_id, profile_));
60 } 61 }
61 62
62 bool KeywordExtensionsDelegateImpl::Start( 63 bool KeywordExtensionsDelegateImpl::Start(
63 const AutocompleteInput& input, 64 const AutocompleteInput& input,
64 bool minimal_changes, 65 bool minimal_changes,
65 const TemplateURL* template_url, 66 const TemplateURL* template_url,
66 const base::string16& remaining_input) { 67 const base::string16& remaining_input) {
67 DCHECK(template_url); 68 DCHECK(template_url);
68 69
69 if (input.want_asynchronous_matches()) { 70 if (input.want_asynchronous_matches()) {
70 std::string extension_id = template_url->GetExtensionId(); 71 std::string extension_id = template_url->GetExtensionId();
71 if (extension_id != current_keyword_extension_id_) 72 if (extension_id != current_keyword_extension_id_)
72 MaybeEndExtensionKeywordMode(); 73 MaybeEndExtensionKeywordMode();
73 if (current_keyword_extension_id_.empty()) 74 if (current_keyword_extension_id_.empty())
74 EnterExtensionKeywordMode(extension_id); 75 EnterExtensionKeywordMode(extension_id);
75 } 76 }
76 77
77 extensions::ApplyDefaultSuggestionForExtensionKeyword( 78 extensions::ApplyDefaultSuggestionForExtensionKeyword(
78 profile(), template_url, remaining_input, &matches()->front()); 79 profile_, template_url, remaining_input, &matches()->front());
79 80
80 if (minimal_changes) { 81 if (minimal_changes) {
81 // If the input hasn't significantly changed, we can just use the 82 // If the input hasn't significantly changed, we can just use the
82 // suggestions from last time. We need to readjust the relevance to 83 // suggestions from last time. We need to readjust the relevance to
83 // ensure it is less than the main match's relevance. 84 // ensure it is less than the main match's relevance.
84 for (size_t i = 0; i < extension_suggest_matches_.size(); ++i) { 85 for (size_t i = 0; i < extension_suggest_matches_.size(); ++i) {
85 matches()->push_back(extension_suggest_matches_[i]); 86 matches()->push_back(extension_suggest_matches_[i]);
86 matches()->back().relevance = matches()->front().relevance - (i + 1); 87 matches()->back().relevance = matches()->front().relevance - (i + 1);
87 } 88 }
88 } else if (input.want_asynchronous_matches()) { 89 } else if (input.want_asynchronous_matches()) {
89 extension_suggest_last_input_ = input; 90 extension_suggest_last_input_ = input;
90 extension_suggest_matches_.clear(); 91 extension_suggest_matches_.clear();
91 92
92 // We only have to wait for suggest results if there are actually 93 // We only have to wait for suggest results if there are actually
93 // extensions listening for input changes. 94 // extensions listening for input changes.
94 if (extensions::ExtensionOmniboxEventRouter::OnInputChanged( 95 if (extensions::ExtensionOmniboxEventRouter::OnInputChanged(
95 profile(), template_url->GetExtensionId(), 96 profile_, template_url->GetExtensionId(),
96 base::UTF16ToUTF8(remaining_input), current_input_id_)) 97 base::UTF16ToUTF8(remaining_input), current_input_id_))
97 set_done(false); 98 set_done(false);
98 } 99 }
99 return input.want_asynchronous_matches(); 100 return input.want_asynchronous_matches();
100 } 101 }
101 102
102 void KeywordExtensionsDelegateImpl::EnterExtensionKeywordMode( 103 void KeywordExtensionsDelegateImpl::EnterExtensionKeywordMode(
103 const std::string& extension_id) { 104 const std::string& extension_id) {
104 DCHECK(current_keyword_extension_id_.empty()); 105 DCHECK(current_keyword_extension_id_.empty());
105 current_keyword_extension_id_ = extension_id; 106 current_keyword_extension_id_ = extension_id;
106 107
107 extensions::ExtensionOmniboxEventRouter::OnInputStarted( 108 extensions::ExtensionOmniboxEventRouter::OnInputStarted(
108 profile(), current_keyword_extension_id_); 109 profile_, current_keyword_extension_id_);
109 } 110 }
110 111
111 void KeywordExtensionsDelegateImpl::MaybeEndExtensionKeywordMode() { 112 void KeywordExtensionsDelegateImpl::MaybeEndExtensionKeywordMode() {
112 if (!current_keyword_extension_id_.empty()) { 113 if (!current_keyword_extension_id_.empty()) {
113 extensions::ExtensionOmniboxEventRouter::OnInputCancelled( 114 extensions::ExtensionOmniboxEventRouter::OnInputCancelled(
114 profile(), current_keyword_extension_id_); 115 profile_, current_keyword_extension_id_);
115 current_keyword_extension_id_.clear(); 116 current_keyword_extension_id_.clear();
116 } 117 }
117 } 118 }
118 119
119 void KeywordExtensionsDelegateImpl::Observe( 120 void KeywordExtensionsDelegateImpl::Observe(
120 int type, 121 int type,
121 const content::NotificationSource& source, 122 const content::NotificationSource& source,
122 const content::NotificationDetails& details) { 123 const content::NotificationDetails& details) {
123 TemplateURLService* model = provider_->GetTemplateURLService(); 124 TemplateURLService* model = provider_->GetTemplateURLService();
124 const AutocompleteInput& input = extension_suggest_last_input_; 125 const AutocompleteInput& input = extension_suggest_last_input_;
(...skipping 13 matching lines...) Expand all
138 // session. 139 // session.
139 base::string16 keyword, remaining_input; 140 base::string16 keyword, remaining_input;
140 if (matches()->empty() || current_keyword_extension_id_.empty() || 141 if (matches()->empty() || current_keyword_extension_id_.empty() ||
141 !KeywordProvider::ExtractKeywordFromInput( 142 !KeywordProvider::ExtractKeywordFromInput(
142 input, &keyword, &remaining_input)) 143 input, &keyword, &remaining_input))
143 return; 144 return;
144 145
145 const TemplateURL* template_url( 146 const TemplateURL* template_url(
146 model->GetTemplateURLForKeyword(keyword)); 147 model->GetTemplateURLForKeyword(keyword));
147 extensions::ApplyDefaultSuggestionForExtensionKeyword( 148 extensions::ApplyDefaultSuggestionForExtensionKeyword(
148 profile(), template_url, remaining_input, &matches()->front()); 149 profile_, template_url, remaining_input, &matches()->front());
149 OnProviderUpdate(true); 150 OnProviderUpdate(true);
150 return; 151 return;
151 } 152 }
152 153
153 case extensions::NOTIFICATION_EXTENSION_OMNIBOX_SUGGESTIONS_READY: { 154 case extensions::NOTIFICATION_EXTENSION_OMNIBOX_SUGGESTIONS_READY: {
154 const omnibox_api::SendSuggestions::Params& suggestions = 155 const omnibox_api::SendSuggestions::Params& suggestions =
155 *content::Details< 156 *content::Details<
156 omnibox_api::SendSuggestions::Params>(details).ptr(); 157 omnibox_api::SendSuggestions::Params>(details).ptr();
157 if (suggestions.request_id != current_input_id_) 158 if (suggestions.request_id != current_input_id_)
158 return; // This is an old result. Just ignore. 159 return; // This is an old result. Just ignore.
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 204
204 default: 205 default:
205 NOTREACHED(); 206 NOTREACHED();
206 return; 207 return;
207 } 208 }
208 } 209 }
209 210
210 void KeywordExtensionsDelegateImpl::OnProviderUpdate(bool updated_matches) { 211 void KeywordExtensionsDelegateImpl::OnProviderUpdate(bool updated_matches) {
211 provider_->listener_->OnProviderUpdate(updated_matches); 212 provider_->listener_->OnProviderUpdate(updated_matches);
212 } 213 }
OLDNEW
« no previous file with comments | « chrome/browser/autocomplete/keyword_extensions_delegate_impl.h ('k') | chrome/browser/autocomplete/keyword_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698