1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// KeywordExtensionsDelegateImpl contains the extensions-only logic used by
// KeywordProvider. Overrides KeywordExtensionsDelegate which does nothing.
#ifndef CHROME_BROWSER_AUTOCOMPLETE_KEYWORD_EXTENSIONS_DELEGATE_IMPL_H_
#define CHROME_BROWSER_AUTOCOMPLETE_KEYWORD_EXTENSIONS_DELEGATE_IMPL_H_
#include <vector>
#include "base/memory/raw_ptr.h"
#include "base/scoped_observation.h"
#include "components/omnibox/browser/autocomplete_input.h"
#include "components/omnibox/browser/autocomplete_match.h"
#include "components/omnibox/browser/autocomplete_provider_listener.h"
#include "components/omnibox/browser/keyword_extensions_delegate.h"
#include "components/omnibox/browser/keyword_provider.h"
#include "components/omnibox/browser/omnibox_input_watcher.h"
#include "components/omnibox/browser/omnibox_suggestions_watcher.h"
#include "extensions/buildflags/buildflags.h"
#if !BUILDFLAG(ENABLE_EXTENSIONS)
#error "Should not be included when extensions are disabled"
#endif
class Profile;
class KeywordExtensionsDelegateImpl
: public KeywordExtensionsDelegate,
public OmniboxInputWatcher::Observer,
public OmniboxSuggestionsWatcher::Observer {
public:
KeywordExtensionsDelegateImpl(Profile* profile, KeywordProvider* provider);
KeywordExtensionsDelegateImpl(const KeywordExtensionsDelegateImpl&) = delete;
KeywordExtensionsDelegateImpl& operator=(
const KeywordExtensionsDelegateImpl&) = delete;
~KeywordExtensionsDelegateImpl() override;
// KeywordExtensionsDelegate:
void DeleteSuggestion(const TemplateURL* template_url,
const std::u16string& suggestion_text) override;
private:
// KeywordExtensionsDelegate:
void IncrementInputId() override;
bool IsEnabledExtension(const std::string& extension_id) override;
bool Start(const AutocompleteInput& input,
bool minimal_changes,
const TemplateURL* template_url,
const std::u16string& remaining_input) override;
void EnterExtensionKeywordMode(const std::string& extension_id) override;
void MaybeEndExtensionKeywordMode() override;
// OmniboxInputWatcher::Observer:
void OnOmniboxInputEntered() override;
// OmniboxSuggestionsWatcher::Observer:
void OnOmniboxSuggestionsReady(
const std::vector<ExtensionSuggestion>& suggestions,
const int request_id,
const std::string& extension_id) override;
void OnOmniboxDefaultSuggestionChanged() override;
ACMatches* matches() { return &provider_->matches_; }
void set_done(bool done) { provider_->done_ = done; }
// Notifies the KeywordProvider about asynchronous updates from the extension.
void OnProviderUpdate(bool updated_matches);
// Identifies the current input state. This is incremented each time the
// autocomplete edit's input changes in any way. It is used to tell whether
// suggest results from the extension are current.
int current_input_id_;
// The input state at the time we last asked the extension for suggest
// results.
AutocompleteInput extension_suggest_last_input_;
// We remember the last suggestions we've received from the extension in case
// we need to reset our matches without asking the extension again.
std::vector<AutocompleteMatch> extension_suggest_matches_;
// If non-empty, holds the ID of the extension whose keyword is currently in
// the URL bar while the autocomplete popup is open.
std::string current_keyword_extension_id_;
raw_ptr<Profile> profile_;
// The owner of this class.
raw_ptr<KeywordProvider> provider_;
// We need our input IDs to be unique across all profiles, so we keep a global
// UID that each provider uses.
static int global_input_uid_;
base::ScopedObservation<OmniboxInputWatcher, OmniboxInputWatcher::Observer>
omnibox_input_observation_{this};
base::ScopedObservation<OmniboxSuggestionsWatcher,
OmniboxSuggestionsWatcher::Observer>
omnibox_suggestions_observation_{this};
};
#endif // CHROME_BROWSER_AUTOCOMPLETE_KEYWORD_EXTENSIONS_DELEGATE_IMPL_H_
|