keyword_extensions_delegate_impl.h revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
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. 4// 5// KeywordExtensionsDelegateImpl contains the extensions-only logic used by 6// KeywordProvider. Overrides KeywordExtensionsDelegate which does nothing. 7 8#ifndef CHROME_BROWSER_AUTOCOMPLETE_KEYWORD_EXTENSIONS_DELEGATE_IMPL_H_ 9#define CHROME_BROWSER_AUTOCOMPLETE_KEYWORD_EXTENSIONS_DELEGATE_IMPL_H_ 10 11#include <vector> 12 13#include "base/compiler_specific.h" 14#include "chrome/browser/autocomplete/keyword_extensions_delegate.h" 15#include "chrome/browser/autocomplete/keyword_provider.h" 16#include "components/omnibox/autocomplete_input.h" 17#include "components/omnibox/autocomplete_match.h" 18#include "components/omnibox/autocomplete_provider_listener.h" 19#include "content/public/browser/notification_observer.h" 20#include "content/public/browser/notification_registrar.h" 21 22#if !defined(ENABLE_EXTENSIONS) 23#error "Should not be included when extensions are disabled" 24#endif 25 26class Profile; 27 28class KeywordExtensionsDelegateImpl : public KeywordExtensionsDelegate, 29 public content::NotificationObserver { 30 public: 31 KeywordExtensionsDelegateImpl(Profile* profile, KeywordProvider* provider); 32 virtual ~KeywordExtensionsDelegateImpl(); 33 34 private: 35 // KeywordExtensionsDelegate: 36 virtual void IncrementInputId() OVERRIDE; 37 virtual bool IsEnabledExtension(const std::string& extension_id) OVERRIDE; 38 virtual bool Start(const AutocompleteInput& input, 39 bool minimal_changes, 40 const TemplateURL* template_url, 41 const base::string16& remaining_input) OVERRIDE; 42 virtual void EnterExtensionKeywordMode( 43 const std::string& extension_id) OVERRIDE; 44 virtual void MaybeEndExtensionKeywordMode() OVERRIDE; 45 46 // content::NotificationObserver: 47 virtual void Observe(int type, 48 const content::NotificationSource& source, 49 const content::NotificationDetails& details) OVERRIDE; 50 51 ACMatches* matches() { return &provider_->matches_; } 52 void set_done(bool done) { 53 provider_->done_ = done; 54 } 55 56 // Notifies the KeywordProvider about asynchronous updates from the extension. 57 void OnProviderUpdate(bool updated_matches); 58 59 // Identifies the current input state. This is incremented each time the 60 // autocomplete edit's input changes in any way. It is used to tell whether 61 // suggest results from the extension are current. 62 int current_input_id_; 63 64 // The input state at the time we last asked the extension for suggest 65 // results. 66 AutocompleteInput extension_suggest_last_input_; 67 68 // We remember the last suggestions we've received from the extension in case 69 // we need to reset our matches without asking the extension again. 70 std::vector<AutocompleteMatch> extension_suggest_matches_; 71 72 // If non-empty, holds the ID of the extension whose keyword is currently in 73 // the URL bar while the autocomplete popup is open. 74 std::string current_keyword_extension_id_; 75 76 Profile* profile_; 77 78 // The owner of this class. 79 KeywordProvider* provider_; 80 81 content::NotificationRegistrar registrar_; 82 83 // We need our input IDs to be unique across all profiles, so we keep a global 84 // UID that each provider uses. 85 static int global_input_uid_; 86 87 DISALLOW_COPY_AND_ASSIGN(KeywordExtensionsDelegateImpl); 88}; 89 90#endif // CHROME_BROWSER_AUTOCOMPLETE_KEYWORD_EXTENSIONS_DELEGATE_IMPL_H_ 91