Index: components/omnibox/browser/contextual_suggestions_service.h |
diff --git a/components/omnibox/browser/contextual_suggestions_service.h b/components/omnibox/browser/contextual_suggestions_service.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8506bc9d2265fe9e8fb9c1148d819eb8beb477eb |
--- /dev/null |
+++ b/components/omnibox/browser/contextual_suggestions_service.h |
@@ -0,0 +1,105 @@ |
+// 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_OMNIBOX_BROWSER_CONTEXTUAL_SUGGESTIONS_SERVICE_H_ |
+#define COMPONENTS_OMNIBOX_BROWSER_CONTEXTUAL_SUGGESTIONS_SERVICE_H_ |
+ |
+#include <memory> |
+#include <string> |
+ |
+#include "base/feature_list.h" |
Mark P
2017/07/18 19:11:28
nit: necessary?
Toyama
2017/07/18 20:28:47
Done. (removed)
|
+#include "components/keyed_service/core/keyed_service.h" |
+#include "components/search_engines/template_url_service.h" |
Mark P
2017/07/18 19:11:28
nit: just forward declare; no need to include
Toyama
2017/07/18 20:28:47
Done.
|
+#include "components/signin/core/browser/access_token_fetcher.h" |
+#include "net/url_request/url_fetcher_delegate.h" |
+#include "net/url_request/url_request_context_getter.h" |
Mark P
2017/07/18 19:11:29
nit: just forward declare; no need to include
Toyama
2017/07/18 20:28:47
Moved to .cc file. There are no symbols needed in
|
+#include "url/gurl.h" |
+ |
+class OAuth2TokenService; |
+class SigninManagerBase; |
+ |
+namespace contextual_suggestions { |
Mark P
2017/07/18 19:11:29
No need for namespace, as everything is already en
Toyama
2017/07/18 20:28:47
Done.
|
+ |
+class ContextualSuggestionsService : public KeyedService { |
Mark P
2017/07/18 19:11:29
nit: Please comment the purpose of this class.
Toyama
2017/07/18 20:28:47
Done.
|
+ public: |
+ ContextualSuggestionsService(SigninManagerBase* signin_manager, |
Mark P
2017/07/18 19:11:28
Please comment whether any of these are allowed to
Toyama
2017/07/18 20:28:47
Done.
|
+ OAuth2TokenService* token_service, |
+ TemplateURLService* template_url_service, |
+ net::URLRequestContextGetter* request_context); |
+ |
+ ~ContextualSuggestionsService() override; |
+ |
+ using ContextualSuggestionsCallback = |
+ base::OnceCallback<void(std::unique_ptr<net::URLFetcher> fetcher)>; |
+ |
+ // Creates a fetch request for contextual suggestions for |visited_url|, with |
+ // |fetcher_delegate| as the URLFetcherDelegate that will process the response |
+ // of the fetcher. |
Mark P
2017/07/18 19:11:29
Please add/revise here to make it clearer what rel
Toyama
2017/07/18 20:28:47
I read the code and I am myself a little bit confu
|
+ // |
+ // * If the URL to send the request to, which is constructed using field trial |
+ // parameters, is invalid, |callback| is executed synchronously witha |
+ // nullptr for |fetcher|. |
+ // * If the service is not using experimental suggestions, |callback| is |
+ // executed synchronously with a valid |fetcher| as a parameter. |
+ // * If the service is supposed to use experimental suggestions and it is |
+ // waiting for an authentication token, |callback| is executed synchronously |
+ // with a nullptr for |fetcher|. * If the service is supposed to use |
+ // experimental suggestions and it is not waiting for an authentication token, |
+ // 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, |
Mark P
2017/07/18 19:11:28
nit: visited_url -> current_url or simply url
Appa
Toyama
2017/07/18 20:28:48
I s/visited_url/current_url/ everything in this co
|
+ net::URLFetcherDelegate* fetcher_delegate, |
+ ContextualSuggestionsCallback callback); |
+ |
+ private: |
+ // Returns true if the folowing conditions are valid: |
+ // * The |visited_url| is non-empty. |
Mark P
2017/07/18 19:11:28
non-empty? Probably this should be checking wheth
Toyama
2017/07/18 20:28:48
The code is currently only checking it's not empty
Mark P
2017/07/18 23:45:50
Usually we pass around GURL variables and use gurl
|
+ // * 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 std::string& visited_url) const; |
+ |
+ // Returns a string representing the address of the server where the zero |
Mark P
2017/07/18 19:11:29
Doesn't return a string...
Toyama
2017/07/18 20:28:47
Done. s/string/URL/
|
+ // suggest requests are being redirected when serving experimental |
+ // suggestions. |
+ static GURL ExperimentalZeroSuggestURL(const std::string& visited_url); |
Mark P
2017/07/18 19:11:29
nit: I'd prefer current_url rather than visited_ur
Toyama
2017/07/18 20:28:47
Done.
|
+ |
+ // Returns a string representing the address of the server where the zero |
+ // suggest request is being sent. |
Mark P
2017/07/18 19:11:29
This comment makes it unclear how this relates to
Toyama
2017/07/18 20:28:48
I s/experimental/is_experimental/ to make the para
Mark P
2017/07/18 23:45:50
I don't feel strongly about memoizing as long as t
|
+ GURL ZeroSuggestURL(const std::string& visited_url, bool experimental) const; |
+ |
+ // Creates an HTTP Get request for contextual suggestions. The return value |
+ // does not include a header corresponding to an authorization token. |
Mark P
2017/07/18 19:11:28
nit:
The return value does not include a header c
Toyama
2017/07/18 20:28:48
Done.
|
+ std::unique_ptr<net::URLFetcher> CreateRequest( |
+ const std::string& visited_url, |
+ bool experimental, |
+ 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 |
Mark P
2017/07/18 19:11:28
Does
iff
mean
if and only if
If so, simply say "w
Toyama
2017/07/18 20:28:48
iff == if and only if
I think "iff" is stronger t
|
+ // token request is currently in progress. |
Mark P
2017/07/18 19:11:29
Roughly when does that happen? There probably sho
Toyama
2017/07/18 20:28:47
I added the comment to CreateContextualSuggestions
|
+ std::unique_ptr<AccessTokenFetcher> token_fetcher_; |
+}; |
Mark P
2017/07/18 19:11:29
nit: missing DISALLOW_COPY_AND_ASSIGN. Is that in
Toyama
2017/07/18 20:28:47
I can't speak for Gheorghe, but I think it was not
|
+ |
+} // namespace contextual_suggestions |
+ |
+#endif // COMPONENTS_OMNIBOX_BROWSER_CONTEXTUAL_SUGGESTIONS_SERVICE_H_ |