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

Unified Diff: ios/chrome/browser/ui/contextual_search/contextual_search_delegate.h

Issue 2588713002: Upstream Chrome on iOS source code [4/11]. (Closed)
Patch Set: Created 4 years 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: ios/chrome/browser/ui/contextual_search/contextual_search_delegate.h
diff --git a/ios/chrome/browser/ui/contextual_search/contextual_search_delegate.h b/ios/chrome/browser/ui/contextual_search/contextual_search_delegate.h
new file mode 100644
index 0000000000000000000000000000000000000000..0feb032fa57852bacde70e1a74c0b0d3fe7a5239
--- /dev/null
+++ b/ios/chrome/browser/ui/contextual_search/contextual_search_delegate.h
@@ -0,0 +1,127 @@
+// Copyright 2014 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 IOS_CHROME_BROWSER_UI_CONTEXTUAL_SEARCH_CONTEXTUAL_SEARCH_DELEGATE_H_
+#define IOS_CHROME_BROWSER_UI_CONTEXTUAL_SEARCH_CONTEXTUAL_SEARCH_DELEGATE_H_
+
+#include <memory>
+
+#include "base/callback.h"
+#include "base/memory/weak_ptr.h"
+#include "base/time/time.h"
+#include "ios/chrome/browser/ui/contextual_search/contextual_search_context.h"
+#include "net/url_request/url_fetcher_delegate.h"
+
+class TemplateURLService;
+
+namespace ios {
+class ChromeBrowserState;
+}
+
+// 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 struct {
+ bool is_invalid;
+ int response_code;
+ std::string search_term;
+ std::string display_text;
+ std::string alternate_term;
+ bool prevent_preload;
+ int start_offset;
+ int end_offset;
+ } SearchResolution;
+
+ typedef base::Callback<void(SearchResolution)> SearchTermResolutionCallback;
+
+ // ID used in creating URLFetcher for Contextual Search results.
+ static const int kContextualSearchURLFetcherID;
+
+ // Constructs a delegate for the given user browser state that will always
+ // call back to the given callbacks when search term resolution or surrounding
+ // text responses are available.
+ ContextualSearchDelegate(
+ ios::ChromeBrowserState* browser_state,
+ const SearchTermResolutionCallback& search_term_callback);
+ ~ContextualSearchDelegate() override;
+
+ // Requests the search term using |context| and parameters that specify the
+ // surrounding text. if |context| represents a local text selection, then no
+ // server request is made and the selection contents are returned as the
+ // relevant text.
+ // When the response is available the callback specified in the constructor
+ // is run.
+ // This method is asynchronous and may delay the request to avoid sending
+ // too many requests to the server. If this function is called multiple times
+ // during that delay, only the latest request is executed. Each new call
+ // cancels previous requests.
+ void PostSearchTermRequest(std::shared_ptr<ContextualSearchContext> context);
+
+ // This method will immediately start the pending request previously posted by
+ // |PostSearchTermRequest|.
+ void StartPendingSearchTermRequest();
+
+ // Cancels the current search term network request.
+ void CancelSearchTermRequest();
+
+ // Get the URL for the search to be run for the query in |resolution|.
+ GURL GetURLForResolvedSearch(SearchResolution resolution,
+ bool should_prefetch);
+
+ private:
+ // net::URLFetcherDelegate:
+ void OnURLFetchComplete(const net::URLFetcher* source) override;
+
+ // Builds the request URL.
+ GURL BuildRequestUrl();
+
+ // Copy search context term as SearchResolution and calls the
+ // search_term_callback_.
+ void RequestLocalSearchTerm();
+
+ // Initiates a network request to get the relevant query context.
+ void RequestServerSearchTerm();
+
+ // 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);
+
+ // Populates the discourse context and adds it to the HTTP header of the
+ // search term resolution request.
+ void SetDiscourseContextAndAddToHeader(
+ const ContextualSearchContext& context);
+
+ // The current request in progress, or NULL.
+ std::unique_ptr<net::URLFetcher> search_term_fetcher_;
+
+ // Holds the TemplateURLService. Not owned.
+ TemplateURLService* template_url_service_;
+
+ // The browser state associated with the Contextual Search Manager.
+ // This reference is not owned by us.
+ ios::ChromeBrowserState* browser_state_;
+
+ // The callback for notifications of completed URL fetches.
+ SearchTermResolutionCallback search_term_callback_;
+
+ // Used to hold the context until an upcoming search term request is started.
+ std::shared_ptr<ContextualSearchContext> context_;
+
+ base::Time last_request_startup_time_;
+ bool request_pending_;
+
+ // Used to ensure |StartRequestSearchTerm()| is not run when this object is
+ // destroyed.
+ base::WeakPtrFactory<ContextualSearchDelegate> weak_ptr_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(ContextualSearchDelegate);
+};
+
+#endif // IOS_CHROME_BROWSER_UI_CONTEXTUAL_SEARCH_CONTEXTUAL_SEARCH_DELEGATE_H_

Powered by Google App Engine
This is Rietveld 408576698