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

Side by Side Diff: chrome/browser/guest_view/web_view/web_view_find_helper.h

Issue 257823005: [Sheriff] Revert "Revert "Revert 266297 "1. Handle the case of empty embedder_extension_id...""" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_FIND_HELPER_H_
6 #define CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_FIND_HELPER_H_
7
8 #include <map>
9 #include <vector>
10
11 #include "base/memory/weak_ptr.h"
12 #include "base/values.h"
13 #include "content/public/browser/web_contents.h"
14 #include "third_party/WebKit/public/web/WebFindOptions.h"
15 #include "ui/gfx/geometry/rect.h"
16
17 namespace extensions {
18 class WebviewFindFunction;
19 } // namespace extensions
20 class WebViewGuest;
21
22 // Helper class for find requests and replies for the webview find API.
23 class WebviewFindHelper {
24 public:
25 explicit WebviewFindHelper(WebViewGuest* webview_guest);
26 ~WebviewFindHelper();
27
28 // Cancels all find requests in progress and calls their callback functions.
29 void CancelAllFindSessions();
30
31 // Dispatches the |findupdate| event.
32 void DispatchFindUpdateEvent(bool canceled, bool final_update);
33
34 // Ends the find session with id |session_request_id| and calls the
35 // appropriate callbacks.
36 void EndFindSession(int session_request_id, bool canceled);
37
38 // Helper function for WebViewGuest::Find().
39 void Find(content::WebContents* guest_web_contents,
40 const base::string16& search_text,
41 const blink::WebFindOptions& options,
42 scoped_refptr<extensions::WebviewFindFunction> find_function);
43
44 // Helper function for WeViewGuest:FindReply().
45 void FindReply(int request_id,
46 int number_of_matches,
47 const gfx::Rect& selection_rect,
48 int active_match_ordinal,
49 bool final_update);
50
51 private:
52 // A wrapper to store find results.
53 class FindResults {
54 public:
55 FindResults();
56 ~FindResults();
57
58 // Aggregate the find results.
59 void AggregateResults(int number_of_matches,
60 const gfx::Rect& selection_rect,
61 int active_match_ordinal,
62 bool final_update);
63
64 // Stores find results into a DictionaryValue.
65 void PrepareResults(base::DictionaryValue* results);
66
67 private:
68 int number_of_matches_;
69 int active_match_ordinal_;
70 gfx::Rect selection_rect_;
71
72 friend void WebviewFindHelper::EndFindSession(int session_request_id,
73 bool canceled);
74
75 DISALLOW_COPY_AND_ASSIGN(FindResults);
76 };
77
78 // Stores and processes the results for the |findupdate| event.
79 class FindUpdateEvent {
80 public:
81 explicit FindUpdateEvent(const base::string16& search_text);
82 ~FindUpdateEvent();
83
84 // Aggregate the find results.
85 void AggregateResults(int number_of_matches,
86 const gfx::Rect& selection_rect,
87 int active_match_ordinal,
88 bool final_update);
89
90 // Stores find results and other event info into a DictionaryValue.
91 void PrepareResults(base::DictionaryValue* results);
92
93 private:
94 const base::string16 search_text_;
95 FindResults find_results_;
96
97 DISALLOW_COPY_AND_ASSIGN(FindUpdateEvent);
98 };
99
100 // Handles all information about a find request and its results.
101 class FindInfo {
102 public:
103 FindInfo(int request_id,
104 const base::string16& search_text,
105 const blink::WebFindOptions& options,
106 scoped_refptr<extensions::WebviewFindFunction> find_function);
107 ~FindInfo();
108
109 // Add another request to |find_next_requests_|.
110 void AddFindNextRequest(const base::WeakPtr<FindInfo>& request) {
111 find_next_requests_.push_back(request);
112 }
113
114 // Aggregate the find results.
115 void AggregateResults(int number_of_matches,
116 const gfx::Rect& selection_rect,
117 int active_match_ordinal,
118 bool final_update);
119
120 base::WeakPtr<FindInfo> AsWeakPtr();
121
122 blink::WebFindOptions* options() {
123 return &options_;
124 }
125
126 bool replied() {
127 return replied_;
128 }
129
130 int request_id() {
131 return request_id_;
132 }
133
134 const base::string16& search_text() {
135 return search_text_;
136 }
137
138 // Calls the callback function within |find_function_| with the find results
139 // from within |find_results_|.
140 void SendResponse(bool canceled);
141
142 private:
143 const int request_id_;
144 const base::string16 search_text_;
145 blink::WebFindOptions options_;
146 scoped_refptr<extensions::WebviewFindFunction> find_function_;
147 FindResults find_results_;
148
149 // A find reply has been received for this find request.
150 bool replied_;
151
152 // Stores pointers to all the find next requests if this is the first
153 // request of a find session.
154 std::vector<base::WeakPtr<FindInfo> > find_next_requests_;
155
156 // Weak pointer used to access the find info of fin.
157 base::WeakPtrFactory<FindInfo> weak_ptr_factory_;
158
159 friend void WebviewFindHelper::EndFindSession(int session_request_id,
160 bool canceled);
161
162 DISALLOW_COPY_AND_ASSIGN(FindInfo);
163 };
164
165 // Pointer to the webview that is being helped.
166 WebViewGuest* const webview_guest_;
167
168 // A counter to generate a unique request id for a find request.
169 // We only need the ids to be unique for a given WebViewGuest.
170 int current_find_request_id_;
171
172 // Stores aggregated find results and other info for the |findupdate| event.
173 scoped_ptr<FindUpdateEvent> find_update_event_;
174
175 // Pointer to the first request of the current find session.
176 linked_ptr<FindInfo> current_find_session_;
177
178 // Stores each find request's information by request_id so that its callback
179 // function can be called when its find results are available.
180 typedef std::map<int, linked_ptr<FindInfo> > FindInfoMap;
181 FindInfoMap find_info_map_;
182
183 DISALLOW_COPY_AND_ASSIGN(WebviewFindHelper);
184 };
185
186 #endif // CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_FIND_HELPER_H_
OLDNEW
« 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