| 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_
|
|
|