keyword_extensions_delegate_impl.h revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
1929f0135ab60166202f52e0dd19835c0490d792aChandler Carruth// Copyright 2014 The Chromium Authors. All rights reserved. 27ccc95bceebb2d1c8fbe277c9e33bde7dc1ccbb1Chandler Carruth// Use of this source code is governed by a BSD-style license that can be 3e452c78072156c14cd9998733e3b4b28b6fc7fd7Douglas Gregor// found in the LICENSE file. 406bc9eb9908e42696775b395b290827bde468c8bDouglas Gregor// 506bc9eb9908e42696775b395b290827bde468c8bDouglas Gregor// KeywordExtensionsDelegateImpl contains the extensions-only logic used by 67ccc95bceebb2d1c8fbe277c9e33bde7dc1ccbb1Chandler Carruth// KeywordProvider. Overrides KeywordExtensionsDelegate which does nothing. 7929f0135ab60166202f52e0dd19835c0490d792aChandler Carruth 87ccc95bceebb2d1c8fbe277c9e33bde7dc1ccbb1Chandler Carruth#ifndef CHROME_BROWSER_AUTOCOMPLETE_KEYWORD_EXTENSIONS_DELEGATE_IMPL_H_ 97ccc95bceebb2d1c8fbe277c9e33bde7dc1ccbb1Chandler Carruth#define CHROME_BROWSER_AUTOCOMPLETE_KEYWORD_EXTENSIONS_DELEGATE_IMPL_H_ 107ccc95bceebb2d1c8fbe277c9e33bde7dc1ccbb1Chandler Carruth 117ccc95bceebb2d1c8fbe277c9e33bde7dc1ccbb1Chandler Carruth#include <vector> 1243fa33b4bedc28d2faa17d678ad1f40eb42817a1Chandler Carruth 1343fa33b4bedc28d2faa17d678ad1f40eb42817a1Chandler Carruth#include "base/compiler_specific.h" 1443fa33b4bedc28d2faa17d678ad1f40eb42817a1Chandler Carruth#include "chrome/browser/autocomplete/autocomplete_input.h" 1543fa33b4bedc28d2faa17d678ad1f40eb42817a1Chandler Carruth#include "chrome/browser/autocomplete/autocomplete_match.h" 1643fa33b4bedc28d2faa17d678ad1f40eb42817a1Chandler Carruth#include "chrome/browser/autocomplete/autocomplete_provider_listener.h" 1743fa33b4bedc28d2faa17d678ad1f40eb42817a1Chandler Carruth#include "chrome/browser/autocomplete/keyword_extensions_delegate.h" 18929f0135ab60166202f52e0dd19835c0490d792aChandler Carruth#include "chrome/browser/autocomplete/keyword_provider.h" 19929f0135ab60166202f52e0dd19835c0490d792aChandler Carruth#include "content/public/browser/notification_observer.h" 207ccc95bceebb2d1c8fbe277c9e33bde7dc1ccbb1Chandler Carruth#include "content/public/browser/notification_registrar.h" 217ccc95bceebb2d1c8fbe277c9e33bde7dc1ccbb1Chandler Carruth 227ccc95bceebb2d1c8fbe277c9e33bde7dc1ccbb1Chandler Carruth#if !defined(ENABLE_EXTENSIONS) 2306bc9eb9908e42696775b395b290827bde468c8bDouglas Gregor#error "Should not be included when extensions are disabled" 247ccc95bceebb2d1c8fbe277c9e33bde7dc1ccbb1Chandler Carruth#endif 25929f0135ab60166202f52e0dd19835c0490d792aChandler Carruth 2606bc9eb9908e42696775b395b290827bde468c8bDouglas Gregorclass KeywordExtensionsDelegateImpl : public KeywordExtensionsDelegate, 2706bc9eb9908e42696775b395b290827bde468c8bDouglas Gregor public content::NotificationObserver { 2806bc9eb9908e42696775b395b290827bde468c8bDouglas Gregor public: 2906bc9eb9908e42696775b395b290827bde468c8bDouglas Gregor explicit KeywordExtensionsDelegateImpl(KeywordProvider* provider); 30929f0135ab60166202f52e0dd19835c0490d792aChandler Carruth virtual ~KeywordExtensionsDelegateImpl(); 3106bc9eb9908e42696775b395b290827bde468c8bDouglas Gregor 3206bc9eb9908e42696775b395b290827bde468c8bDouglas Gregor private: 33929f0135ab60166202f52e0dd19835c0490d792aChandler Carruth // KeywordExtensionsDelegate: 3406bc9eb9908e42696775b395b290827bde468c8bDouglas Gregor virtual void IncrementInputId() OVERRIDE; 3506bc9eb9908e42696775b395b290827bde468c8bDouglas Gregor virtual bool IsEnabledExtension(Profile* profile, 36929f0135ab60166202f52e0dd19835c0490d792aChandler Carruth const std::string& extension_id) OVERRIDE; 3706bc9eb9908e42696775b395b290827bde468c8bDouglas Gregor virtual bool Start(const AutocompleteInput& input, 3806bc9eb9908e42696775b395b290827bde468c8bDouglas Gregor bool minimal_changes, 39929f0135ab60166202f52e0dd19835c0490d792aChandler Carruth const TemplateURL* template_url, 407ccc95bceebb2d1c8fbe277c9e33bde7dc1ccbb1Chandler Carruth const base::string16& remaining_input) OVERRIDE; 41707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor virtual void EnterExtensionKeywordMode( 42707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor const std::string& extension_id) OVERRIDE; 43707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor virtual void MaybeEndExtensionKeywordMode() OVERRIDE; 44707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor 45707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor // content::NotificationObserver: 46707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor virtual void Observe(int type, 47707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor const content::NotificationSource& source, 48707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor const content::NotificationDetails& details) OVERRIDE; 49707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor 50707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor Profile* profile() { return provider_->profile_; } 51707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor ACMatches* matches() { return &provider_->matches_; } 52707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor void set_done(bool done) { 53707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor provider_->done_ = done; 54707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor } 55707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor 56707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor // Notifies the KeywordProvider about asynchronous updates from the extension. 57707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor void OnProviderUpdate(bool updated_matches); 58707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor 59707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor // Identifies the current input state. This is incremented each time the 60707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor // autocomplete edit's input changes in any way. It is used to tell whether 61707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor // suggest results from the extension are current. 62707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor int current_input_id_; 63707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor 64707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor // The input state at the time we last asked the extension for suggest 65707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor // results. 66707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor AutocompleteInput extension_suggest_last_input_; 67707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor 68707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor // We remember the last suggestions we've received from the extension in case 69707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor // we need to reset our matches without asking the extension again. 70707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor std::vector<AutocompleteMatch> extension_suggest_matches_; 71707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor 72707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor // If non-empty, holds the ID of the extension whose keyword is currently in 73707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor // the URL bar while the autocomplete popup is open. 74707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor std::string current_keyword_extension_id_; 75707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor 76707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor // The owner of this class. 77707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor KeywordProvider* provider_; 78707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor 79707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor content::NotificationRegistrar registrar_; 80707a23e8b87410332b55bb4534fa1c799edef38aDouglas Gregor 817ccc95bceebb2d1c8fbe277c9e33bde7dc1ccbb1Chandler Carruth // We need our input IDs to be unique across all profiles, so we keep a global 827ccc95bceebb2d1c8fbe277c9e33bde7dc1ccbb1Chandler Carruth // UID that each provider uses. 83134cb4442d6205e0226944ead4c7ede425fba206Chandler Carruth static int global_input_uid_; 84134cb4442d6205e0226944ead4c7ede425fba206Chandler Carruth 85134cb4442d6205e0226944ead4c7ede425fba206Chandler Carruth DISALLOW_COPY_AND_ASSIGN(KeywordExtensionsDelegateImpl); 86134cb4442d6205e0226944ead4c7ede425fba206Chandler Carruth}; 87134cb4442d6205e0226944ead4c7ede425fba206Chandler Carruth 88134cb4442d6205e0226944ead4c7ede425fba206Chandler Carruth#endif // CHROME_BROWSER_AUTOCOMPLETE_KEYWORD_EXTENSIONS_DELEGATE_IMPL_H_ 89134cb4442d6205e0226944ead4c7ede425fba206Chandler Carruth