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

Unified Diff: components/contextual_suggestions/contextual_suggestions_service.h

Issue 2965173002: Add ContextualSuggestionsService to Omnibox (Closed)
Patch Set: Created 3 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: components/contextual_suggestions/contextual_suggestions_service.h
diff --git a/components/contextual_suggestions/contextual_suggestions_service.h b/components/contextual_suggestions/contextual_suggestions_service.h
new file mode 100644
index 0000000000000000000000000000000000000000..1b94a5e458ad5dd903f11ea477bee85a0dd6783d
--- /dev/null
+++ b/components/contextual_suggestions/contextual_suggestions_service.h
@@ -0,0 +1,93 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_CONTEXTUAL_SUGGESTIONS_CONTEXTUAL_SUGGESTIONS_SERVICE_H_
+#define COMPONENTS_CONTEXTUAL_SUGGESTIONS_CONTEXTUAL_SUGGESTIONS_SERVICE_H_
+
+#include <memory>
+#include <string>
+
+#include "base/feature_list.h"
+#include "components/keyed_service/core/keyed_service.h"
+#include "components/search_engines/template_url_service.h"
+#include "components/signin/core/browser/access_token_fetcher.h"
+#include "components/signin/core/browser/signin_manager_base.h"
+#include "google_apis/gaia/oauth2_token_service.h"
+#include "net/url_request/url_fetcher_delegate.h"
+#include "net/url_request/url_request_context_getter.h"
+#include "url/gurl.h"
+
+namespace contextual_suggestions {
+
+class ContextualSuggestionsService : public KeyedService {
+ public:
+ ContextualSuggestionsService(SigninManagerBase* signin_manager,
+ OAuth2TokenService* token_service,
+ TemplateURLService* template_url_service,
+ net::URLRequestContextGetter* request_context);
+
+ ~ContextualSuggestionsService() override;
+
+ // Returns true if the folowing conditions are valid:
+ // * The |default_provider| is Google.
+ // * The user is in the ZeroSuggestRedirectToChrome field trial.
+ // * The field trial provides a valid server address where the suggest request
+ // is redirected.
+ // * The suggest request is over HTTPS. This avoids leaking the current page
+ // URL or personal data in unencrypted network traffic.
+ // Note: these checks are in addition to CanSendUrl() on the default
+ // contextual suggestion URL.
+ bool UseExperimentalZeroSuggestSuggestions() const;
+
+ using ContextualSuggestionsCallback =
+ base::OnceCallback<void(std::unique_ptr<net::URLFetcher> fetcher)>;
+ // Creates a fetch request for experimental contextual suggestions for
+ // |visited_url|, with |fetcher_delegate| as the URLFetcherDelegate that will
+ // process the response of the fetcher.
+ //
+ // If any of the following conditions is true, |callback| is executed
+ // synchronously with a nullptr for |fetcher|.
+ // * The service is already waiting for an authentication token.
+ // * The URL to send the request to, which is constructed using field trial
+ // parameters, is invalid.
+ //
+ // If all conditions above are false, a request for an auth token is made
+ // asynchronously. After the token is obtained and attached to the |fetcher|,
+ // |callback| is called with a valid |fetcher| as a parameter.
+ void CreateContextualSuggestionsRequest(
+ const std::string& visited_url,
+ net::URLFetcherDelegate* fetcher_delegate,
+ ContextualSuggestionsCallback callback);
+
+ private:
+ // Returns a string representing the address of the server where the zero
+ // suggest requests are being redirected.
+ static GURL ExperimentalZeroSuggestURL(const std::string& visited_url);
+
+ // Creates an HTTP Get request for experimental contextual suggestions. The
+ // return value does not include a header corresponding to an authorization
+ // token.
+ std::unique_ptr<net::URLFetcher> CreateRequest(
+ const std::string& visited_url,
+ net::URLFetcherDelegate* fetcher_delegate) const;
+
+ // Called when an access token request completes (successfully or not).
+ void AccessTokenAvailable(std::unique_ptr<net::URLFetcher> fetcher,
+ ContextualSuggestionsCallback callback,
+ const GoogleServiceAuthError& error,
+ const std::string& access_token);
+
+ net::URLRequestContextGetter* request_context_;
+ SigninManagerBase* signin_manager_;
+ TemplateURLService* template_url_service_;
+ OAuth2TokenService* token_service_;
+
+ // Helper for fetching OAuth2 access tokens. This is non-null iff an access
+ // token request is currently in progress.
+ std::unique_ptr<AccessTokenFetcher> token_fetcher_;
+};
+
+} // namespace contextual_suggestions
+
+#endif // COMPONENTS_CONTEXTUAL_SUGGESTIONS_CONTEXTUAL_SUGGESTIONS_SERVICE_H_

Powered by Google App Engine
This is Rietveld 408576698