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

Unified Diff: chrome/browser/android/contextualsearch/contextual_search_delegate.h

Issue 1141283003: Upstream oodles of Chrome for Android code into Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: final patch? Created 5 years, 7 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: chrome/browser/android/contextualsearch/contextual_search_delegate.h
diff --git a/chrome/browser/android/contextualsearch/contextual_search_delegate.h b/chrome/browser/android/contextualsearch/contextual_search_delegate.h
new file mode 100644
index 0000000000000000000000000000000000000000..6842e1438522bf82a6867a44786127637fb0625a
--- /dev/null
+++ b/chrome/browser/android/contextualsearch/contextual_search_delegate.h
@@ -0,0 +1,201 @@
+// Copyright 2015 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 CHROME_BROWSER_ANDROID_CONTEXTUALSEARCH_CONTEXTUAL_SEARCH_DELEGATE_H_
+#define CHROME_BROWSER_ANDROID_CONTEXTUALSEARCH_CONTEXTUAL_SEARCH_DELEGATE_H_
+
+#include "base/callback.h"
+#include "base/gtest_prod_util.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "chrome/browser/android/contextualsearch/contextual_search_context.h"
+#include "content/public/browser/android/content_view_core.h"
+#include "net/url_request/url_fetcher_delegate.h"
+
+namespace net {
+class URLRequestContextGetter;
+} // namespace net
+
+class Profile;
+class TemplateURLService;
+
+// Handles tasks for the ContextualSearchManager in a separable and testable
+// way, without the complication of being connected to a Java object.
+class ContextualSearchDelegate
+ : public net::URLFetcherDelegate,
+ public base::SupportsWeakPtr<ContextualSearchDelegate> {
+ public:
+ typedef base::Callback<
+ void(bool, int, const std::string&, const std::string&,
+ const std::string&, bool)>
+ SearchTermResolutionCallback;
+ typedef base::Callback<
+ void(const std::string&, const std::string&)> SurroundingTextCallback;
+ typedef base::Callback<
+ void(const base::string16&, int, int)>
+ HandleSurroundingsCallback;
+ typedef base::Callback<
+ void(const std::string&, const base::string16&, size_t, size_t)>
+ IcingCallback;
+
+ // ID used in creating URLFetcher for Contextual Search results.
+ static const int kContextualSearchURLFetcherID;
+
+ // Constructs a delegate that will always call back to the given callbacks
+ // when search term resolution or surrounding text responses are available.
+ ContextualSearchDelegate(
+ net::URLRequestContextGetter* url_request_context,
+ TemplateURLService* template_url_service,
+ const SearchTermResolutionCallback& search_term_callback,
+ const SurroundingTextCallback& surrounding_callback,
+ const IcingCallback& icing_callback);
+ ~ContextualSearchDelegate() override;
+
+ // Gathers surrounding text and starts an asynchronous search term resolution
+ // request. The "search term" is the best query to issue for a section of text
+ // in the context of a web page. When the response is available the callback
+ // specified in the constructor is run.
+ void StartSearchTermResolutionRequest(
+ const std::string& selection,
+ bool use_resolved_search_term,
+ content::ContentViewCore* content_view_core);
+
+ // Gathers surrounding text and saves it locally for a future query.
+ void GatherAndSaveSurroundingText(
+ const std::string& selection,
+ bool use_resolved_search_term,
+ content::ContentViewCore* content_view_core);
+
+ // Continues making a Search Term Resolution request based on the context
+ // set up through calling |GatherAndSaveSurroundingText|.
+ // When the response is available the callback specified in the constructor
+ // is run.
+ void ContinueSearchTermResolutionRequest();
+
+ // For testing.
+ void set_context_for_testing(ContextualSearchContext* context) {
+ context_.reset(context);
+ }
+
+ private:
+ FRIEND_TEST_ALL_PREFIXES(ContextualSearchDelegateTest,
+ SurroundingTextHighMaximum);
+ FRIEND_TEST_ALL_PREFIXES(ContextualSearchDelegateTest,
+ SurroundingTextLowMaximum);
+ FRIEND_TEST_ALL_PREFIXES(ContextualSearchDelegateTest,
+ SurroundingTextNoBeforeText);
+ FRIEND_TEST_ALL_PREFIXES(ContextualSearchDelegateTest,
+ SurroundingTextForIcing);
+ FRIEND_TEST_ALL_PREFIXES(ContextualSearchDelegateTest,
+ SurroundingTextForIcingNegativeLimit);
+ FRIEND_TEST_ALL_PREFIXES(ContextualSearchDelegateTest,
+ DecodeSearchTermsFromJsonResponse);
+
+ // net::URLFetcherDelegate:
+ void OnURLFetchComplete(const net::URLFetcher* source) override;
+
+ // Builds the search term resolution request URL from the current context.
+ GURL BuildRequestUrl();
+
+ // Uses the TemplateURL service to construct a search term resolution URL from
+ // the given parameters.
+ std::string GetSearchTermResolutionUrlString(
+ const std::string& selected_text,
+ const std::string& base_page_url,
+ const bool use_resolved_search_term);
+
+ // Will gather the surrounding text from the |content_view_core| and call the
+ // |callback|.
+ void GatherSurroundingTextWithCallback(
+ const std::string& selection,
+ bool use_resolved_search_term,
+ content::ContentViewCore* content_view_core,
+ HandleSurroundingsCallback callback);
+
+ // Callback for GatherSurroundingTextWithCallback(). Will start the search
+ // term resolution request.
+ void StartSearchTermRequestFromSelection(
+ const base::string16& surrounding_text,
+ int start_offset,
+ int end_offset);
+
+ void SaveSurroundingText(
+ const base::string16& surrounding_text,
+ int start_offset,
+ int end_offset);
+
+ // Will call back to the manager with the proper surrounding text to be shown
+ // in the UI. Will return a maximum of |max_surrounding_chars| characters for
+ // each of the segments.
+ void SendSurroundingText(int max_surrounding_chars);
+
+ // Populates the discourse context and adds it to the HTTP header of the
+ // search term resolution request.
+ void SetDiscourseContextAndAddToHeader(
+ const ContextualSearchContext& context);
+
+ // Checks if we can send the URL for this user. Several conditions are checked
+ // to make sure it's OK to send the url. These fall into two categories:
+ // 1) check if it's allowed by our policy, and 2) ensure that the user is
+ // already sending their URL browsing activity to Google.
+ bool CanSendPageURL(const GURL& current_page_url,
+ Profile* profile,
+ TemplateURLService* template_url_service);
+
+ // Decodes the given json response string and extracts parameters.
+ void DecodeSearchTermsFromJsonResponse(const std::string& response,
+ std::string* search_term,
+ std::string* display_text,
+ std::string* alternate_term,
+ std::string* prevent_preload);
+
+ // Returns the surrounding size to use for the search term resolution
+ // request.
+ int GetSearchTermSurroundingSize();
+
+ // Returns the size of the surroundings to be sent to Icing.
+ int GetIcingSurroundingSize();
+
+ // Generates a subset of the given surrounding_text string, for Icing
+ // integration.
+ // |surrounding_text| the entire text context that contains the selection.
+ // |padding_each_side| the number of characters of padding desired on each
+ // side of the selection (negative values treated as 0).
+ // |start| the start offset of the selection, updated to reflect the new
+ // position
+ // of the selection in the function result.
+ // |end| the end offset of the selection, updated to reflect the new position
+ // of the selection in the function result.
+ // |return| the trimmed surrounding text with selection at the
+ // updated start/end offsets.
+ base::string16 SurroundingTextForIcing(const base::string16& surrounding_text,
+ int padding_each_side,
+ size_t* start,
+ size_t* end);
+
+ // The current request in progress, or NULL.
+ scoped_ptr<net::URLFetcher> search_term_fetcher_;
+
+ // Holds the URL request context. Not owned.
+ net::URLRequestContextGetter* url_request_context_;
+
+ // Holds the TemplateURLService. Not owned.
+ TemplateURLService* template_url_service_;
+
+ // The callback for notifications of completed URL fetches.
+ SearchTermResolutionCallback search_term_callback_;
+
+ // The callback for notifications of surrounding text being available.
+ SurroundingTextCallback surrounding_callback_;
+
+ // The callback for notifications of Icing selection being available.
+ IcingCallback icing_callback_;
+
+ // Used to hold the context until an upcoming search term request is started.
+ scoped_ptr<ContextualSearchContext> context_;
+
+ DISALLOW_COPY_AND_ASSIGN(ContextualSearchDelegate);
+};
+
+#endif // CHROME_BROWSER_ANDROID_CONTEXTUALSEARCH_CONTEXTUAL_SEARCH_DELEGATE_H_

Powered by Google App Engine
This is Rietveld 408576698