| OLD | NEW |
| 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/chrome_notification_types.h" | |
| 9 #include "chrome/browser/extensions/api/omnibox/omnibox_api.h" | 8 #include "chrome/browser/extensions/api/omnibox/omnibox_api.h" |
| 10 #include "chrome/browser/extensions/extension_service.h" | 9 #include "chrome/browser/extensions/extension_service.h" |
| 11 #include "chrome/browser/extensions/extension_util.h" | 10 #include "chrome/browser/extensions/extension_util.h" |
| 12 #include "chrome/browser/profiles/profile.h" | 11 #include "chrome/browser/profiles/profile.h" |
| 13 #include "content/public/browser/notification_details.h" | 12 #include "content/public/browser/notification_details.h" |
| 14 #include "content/public/browser/notification_source.h" | 13 #include "content/public/browser/notification_source.h" |
| 15 #include "extensions/browser/extension_system.h" | 14 #include "extensions/browser/extension_system.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 KeywordProvider* provider) | 22 KeywordProvider* provider) |
| 23 : KeywordExtensionsDelegate(provider), | 23 : KeywordExtensionsDelegate(provider), |
| 24 provider_(provider) { | 24 provider_(provider) { |
| 25 DCHECK(provider_); | 25 DCHECK(provider_); |
| 26 | 26 |
| 27 current_input_id_ = 0; | 27 current_input_id_ = 0; |
| 28 // Extension suggestions always come from the original profile, since that's | 28 // Extension suggestions always come from the original profile, since that's |
| 29 // where extensions run. We use the input ID to distinguish whether the | 29 // where extensions run. We use the input ID to distinguish whether the |
| 30 // suggestions are meant for us. | 30 // suggestions are meant for us. |
| 31 registrar_.Add(this, |
| 32 extensions::NOTIFICATION_EXTENSION_OMNIBOX_SUGGESTIONS_READY, |
| 33 content::Source<Profile>(profile()->GetOriginalProfile())); |
| 31 registrar_.Add( | 34 registrar_.Add( |
| 32 this, chrome::NOTIFICATION_EXTENSION_OMNIBOX_SUGGESTIONS_READY, | 35 this, |
| 36 extensions::NOTIFICATION_EXTENSION_OMNIBOX_DEFAULT_SUGGESTION_CHANGED, |
| 33 content::Source<Profile>(profile()->GetOriginalProfile())); | 37 content::Source<Profile>(profile()->GetOriginalProfile())); |
| 34 registrar_.Add( | 38 registrar_.Add(this, |
| 35 this, chrome::NOTIFICATION_EXTENSION_OMNIBOX_DEFAULT_SUGGESTION_CHANGED, | 39 extensions::NOTIFICATION_EXTENSION_OMNIBOX_INPUT_ENTERED, |
| 36 content::Source<Profile>(profile()->GetOriginalProfile())); | 40 content::Source<Profile>(profile())); |
| 37 registrar_.Add( | |
| 38 this, chrome::NOTIFICATION_EXTENSION_OMNIBOX_INPUT_ENTERED, | |
| 39 content::Source<Profile>(profile())); | |
| 40 } | 41 } |
| 41 | 42 |
| 42 KeywordExtensionsDelegateImpl::~KeywordExtensionsDelegateImpl() { | 43 KeywordExtensionsDelegateImpl::~KeywordExtensionsDelegateImpl() { |
| 43 } | 44 } |
| 44 | 45 |
| 45 void KeywordExtensionsDelegateImpl::IncrementInputId() { | 46 void KeywordExtensionsDelegateImpl::IncrementInputId() { |
| 46 current_input_id_ = ++global_input_uid_; | 47 current_input_id_ = ++global_input_uid_; |
| 47 } | 48 } |
| 48 | 49 |
| 49 bool KeywordExtensionsDelegateImpl::IsEnabledExtension( | 50 bool KeywordExtensionsDelegateImpl::IsEnabledExtension( |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 } | 117 } |
| 117 | 118 |
| 118 void KeywordExtensionsDelegateImpl::Observe( | 119 void KeywordExtensionsDelegateImpl::Observe( |
| 119 int type, | 120 int type, |
| 120 const content::NotificationSource& source, | 121 const content::NotificationSource& source, |
| 121 const content::NotificationDetails& details) { | 122 const content::NotificationDetails& details) { |
| 122 TemplateURLService* model = provider_->GetTemplateURLService(); | 123 TemplateURLService* model = provider_->GetTemplateURLService(); |
| 123 const AutocompleteInput& input = extension_suggest_last_input_; | 124 const AutocompleteInput& input = extension_suggest_last_input_; |
| 124 | 125 |
| 125 switch (type) { | 126 switch (type) { |
| 126 case chrome::NOTIFICATION_EXTENSION_OMNIBOX_INPUT_ENTERED: | 127 case extensions::NOTIFICATION_EXTENSION_OMNIBOX_INPUT_ENTERED: |
| 127 // Input has been accepted, so we're done with this input session. Ensure | 128 // Input has been accepted, so we're done with this input session. Ensure |
| 128 // we don't send the OnInputCancelled event, or handle any more stray | 129 // we don't send the OnInputCancelled event, or handle any more stray |
| 129 // suggestions_ready events. | 130 // suggestions_ready events. |
| 130 current_keyword_extension_id_.clear(); | 131 current_keyword_extension_id_.clear(); |
| 131 current_input_id_ = 0; | 132 current_input_id_ = 0; |
| 132 return; | 133 return; |
| 133 | 134 |
| 134 case chrome::NOTIFICATION_EXTENSION_OMNIBOX_DEFAULT_SUGGESTION_CHANGED: { | 135 case extensions::NOTIFICATION_EXTENSION_OMNIBOX_DEFAULT_SUGGESTION_CHANGED |
| 136 : { |
| 135 // It's possible to change the default suggestion while not in an editing | 137 // It's possible to change the default suggestion while not in an editing |
| 136 // session. | 138 // session. |
| 137 base::string16 keyword, remaining_input; | 139 base::string16 keyword, remaining_input; |
| 138 if (matches()->empty() || current_keyword_extension_id_.empty() || | 140 if (matches()->empty() || current_keyword_extension_id_.empty() || |
| 139 !KeywordProvider::ExtractKeywordFromInput( | 141 !KeywordProvider::ExtractKeywordFromInput( |
| 140 input, &keyword, &remaining_input)) | 142 input, &keyword, &remaining_input)) |
| 141 return; | 143 return; |
| 142 | 144 |
| 143 const TemplateURL* template_url( | 145 const TemplateURL* template_url( |
| 144 model->GetTemplateURLForKeyword(keyword)); | 146 model->GetTemplateURLForKeyword(keyword)); |
| 145 extensions::ApplyDefaultSuggestionForExtensionKeyword( | 147 extensions::ApplyDefaultSuggestionForExtensionKeyword( |
| 146 profile(), template_url, remaining_input, &matches()->front()); | 148 profile(), template_url, remaining_input, &matches()->front()); |
| 147 OnProviderUpdate(true); | 149 OnProviderUpdate(true); |
| 148 return; | 150 return; |
| 149 } | 151 } |
| 150 | 152 |
| 151 case chrome::NOTIFICATION_EXTENSION_OMNIBOX_SUGGESTIONS_READY: { | 153 case extensions::NOTIFICATION_EXTENSION_OMNIBOX_SUGGESTIONS_READY: { |
| 152 const omnibox_api::SendSuggestions::Params& suggestions = | 154 const omnibox_api::SendSuggestions::Params& suggestions = |
| 153 *content::Details< | 155 *content::Details< |
| 154 omnibox_api::SendSuggestions::Params>(details).ptr(); | 156 omnibox_api::SendSuggestions::Params>(details).ptr(); |
| 155 if (suggestions.request_id != current_input_id_) | 157 if (suggestions.request_id != current_input_id_) |
| 156 return; // This is an old result. Just ignore. | 158 return; // This is an old result. Just ignore. |
| 157 | 159 |
| 158 base::string16 keyword, remaining_input; | 160 base::string16 keyword, remaining_input; |
| 159 bool result = KeywordProvider::ExtractKeywordFromInput( | 161 bool result = KeywordProvider::ExtractKeywordFromInput( |
| 160 input, &keyword, &remaining_input); | 162 input, &keyword, &remaining_input); |
| 161 DCHECK(result); | 163 DCHECK(result); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 | 203 |
| 202 default: | 204 default: |
| 203 NOTREACHED(); | 205 NOTREACHED(); |
| 204 return; | 206 return; |
| 205 } | 207 } |
| 206 } | 208 } |
| 207 | 209 |
| 208 void KeywordExtensionsDelegateImpl::OnProviderUpdate(bool updated_matches) { | 210 void KeywordExtensionsDelegateImpl::OnProviderUpdate(bool updated_matches) { |
| 209 provider_->listener_->OnProviderUpdate(updated_matches); | 211 provider_->listener_->OnProviderUpdate(updated_matches); |
| 210 } | 212 } |
| OLD | NEW |