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

Unified Diff: chrome/browser/guest_view/web_view/web_view_find_helper.h

Issue 505893002: Revert of Move core web_view code to extensions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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/guest_view/web_view/web_view_find_helper.h
diff --git a/chrome/browser/guest_view/web_view/web_view_find_helper.h b/chrome/browser/guest_view/web_view/web_view_find_helper.h
new file mode 100644
index 0000000000000000000000000000000000000000..b257a727ee903736996c7eb2e6c1ce103b12f834
--- /dev/null
+++ b/chrome/browser/guest_view/web_view/web_view_find_helper.h
@@ -0,0 +1,190 @@
+// 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 CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_FIND_HELPER_H_
+#define CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_FIND_HELPER_H_
+
+#include <map>
+#include <vector>
+
+#include "base/memory/weak_ptr.h"
+#include "base/values.h"
+#include "content/public/browser/web_contents.h"
+#include "third_party/WebKit/public/web/WebFindOptions.h"
+#include "ui/gfx/geometry/rect.h"
+
+namespace extensions {
+class WebViewInternalFindFunction;
+class WebViewGuest;
+
+// Helper class for find requests and replies for the web_view_internal find
+// API.
+class WebViewFindHelper {
+ public:
+ explicit WebViewFindHelper(WebViewGuest* webview_guest);
+ ~WebViewFindHelper();
+
+ // Cancels all find requests in progress and calls their callback functions.
+ void CancelAllFindSessions();
+
+ // Dispatches the |findupdate| event.
+ void DispatchFindUpdateEvent(bool canceled, bool final_update);
+
+ // Ends the find session with id |session_request_id| and calls the
+ // appropriate callbacks.
+ void EndFindSession(int session_request_id, bool canceled);
+
+ // Helper function for WebViewGuest::Find().
+ void Find(
+ content::WebContents* guest_web_contents,
+ const base::string16& search_text,
+ const blink::WebFindOptions& options,
+ scoped_refptr<WebViewInternalFindFunction> find_function);
+
+ // Helper function for WeViewGuest:FindReply().
+ void FindReply(int request_id,
+ int number_of_matches,
+ const gfx::Rect& selection_rect,
+ int active_match_ordinal,
+ bool final_update);
+
+ private:
+ // A wrapper to store find results.
+ class FindResults {
+ public:
+ FindResults();
+ ~FindResults();
+
+ // Aggregate the find results.
+ void AggregateResults(int number_of_matches,
+ const gfx::Rect& selection_rect,
+ int active_match_ordinal,
+ bool final_update);
+
+ // Stores find results into a DictionaryValue.
+ void PrepareResults(base::DictionaryValue* results);
+
+ private:
+ int number_of_matches_;
+ int active_match_ordinal_;
+ gfx::Rect selection_rect_;
+
+ friend void WebViewFindHelper::EndFindSession(int session_request_id,
+ bool canceled);
+
+ DISALLOW_COPY_AND_ASSIGN(FindResults);
+ };
+
+ // Stores and processes the results for the |findupdate| event.
+ class FindUpdateEvent {
+ public:
+ explicit FindUpdateEvent(const base::string16& search_text);
+ ~FindUpdateEvent();
+
+ // Aggregate the find results.
+ void AggregateResults(int number_of_matches,
+ const gfx::Rect& selection_rect,
+ int active_match_ordinal,
+ bool final_update);
+
+ // Stores find results and other event info into a DictionaryValue.
+ void PrepareResults(base::DictionaryValue* results);
+
+ private:
+ const base::string16 search_text_;
+ FindResults find_results_;
+
+ DISALLOW_COPY_AND_ASSIGN(FindUpdateEvent);
+ };
+
+ // Handles all information about a find request and its results.
+ class FindInfo {
+ public:
+ FindInfo(
+ int request_id,
+ const base::string16& search_text,
+ const blink::WebFindOptions& options,
+ scoped_refptr<WebViewInternalFindFunction> find_function);
+ ~FindInfo();
+
+ // Add another request to |find_next_requests_|.
+ void AddFindNextRequest(const base::WeakPtr<FindInfo>& request) {
+ find_next_requests_.push_back(request);
+ }
+
+ // Aggregate the find results.
+ void AggregateResults(int number_of_matches,
+ const gfx::Rect& selection_rect,
+ int active_match_ordinal,
+ bool final_update);
+
+ base::WeakPtr<FindInfo> AsWeakPtr();
+
+ blink::WebFindOptions* options() {
+ return &options_;
+ }
+
+ bool replied() {
+ return replied_;
+ }
+
+ int request_id() {
+ return request_id_;
+ }
+
+ const base::string16& search_text() {
+ return search_text_;
+ }
+
+ // Calls the callback function within |find_function_| with the find results
+ // from within |find_results_|.
+ void SendResponse(bool canceled);
+
+ private:
+ const int request_id_;
+ const base::string16 search_text_;
+ blink::WebFindOptions options_;
+ scoped_refptr<WebViewInternalFindFunction> find_function_;
+ FindResults find_results_;
+
+ // A find reply has been received for this find request.
+ bool replied_;
+
+ // Stores pointers to all the find next requests if this is the first
+ // request of a find session.
+ std::vector<base::WeakPtr<FindInfo> > find_next_requests_;
+
+ // Weak pointer used to access the find info of fin.
+ base::WeakPtrFactory<FindInfo> weak_ptr_factory_;
+
+ friend void WebViewFindHelper::EndFindSession(int session_request_id,
+ bool canceled);
+
+ DISALLOW_COPY_AND_ASSIGN(FindInfo);
+ };
+
+ // Pointer to the webview that is being helped.
+ WebViewGuest* const webview_guest_;
+
+ // A counter to generate a unique request id for a find request.
+ // We only need the ids to be unique for a given WebViewGuest.
+ int current_find_request_id_;
+
+ // Stores aggregated find results and other info for the |findupdate| event.
+ scoped_ptr<FindUpdateEvent> find_update_event_;
+
+ // Pointer to the first request of the current find session.
+ linked_ptr<FindInfo> current_find_session_;
+
+ // Stores each find request's information by request_id so that its callback
+ // function can be called when its find results are available.
+ typedef std::map<int, linked_ptr<FindInfo> > FindInfoMap;
+ FindInfoMap find_info_map_;
+
+ DISALLOW_COPY_AND_ASSIGN(WebViewFindHelper);
+};
+
+} // namespace extensions
+
+#endif // CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_FIND_HELPER_H_
« no previous file with comments | « chrome/browser/guest_view/web_view/web_view_constants.cc ('k') | chrome/browser/guest_view/web_view/web_view_find_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698