1 // Copyright (c) 2012 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.
5 #ifndef ANDROID_WEBVIEW_BROWSER_FIND_HELPER_H_
6 #define ANDROID_WEBVIEW_BROWSER_FIND_HELPER_H_
8 #include "base/memory/weak_ptr.h"
9 #include "content/public/browser/web_contents_observer.h"
11 namespace android_webview
{
13 // Handles the WebView find-in-page API requests.
14 class FindHelper
: public content::WebContentsObserver
{
18 // Called when receiving a new find-in-page update.
19 // This will be triggered when the results of FindAllSync, FindAllAsync and
20 // FindNext are available. The value provided in active_ordinal is 0-based.
21 virtual void OnFindResultReceived(int active_ordinal
,
24 virtual ~Listener() {}
27 explicit FindHelper(content::WebContents
* web_contents
);
28 ~FindHelper() override
;
30 // Sets the listener to receive find result updates.
31 // Does not own the listener and must set to NULL when invalid.
32 void SetListener(Listener
* listener
);
35 void FindAllAsync(const base::string16
& search_string
);
36 void HandleFindReply(int request_id
,
41 // Methods valid in both synchronous and asynchronous modes.
42 void FindNext(bool forward
);
46 void StartNewRequest(const base::string16
& search_string
);
47 void NotifyResults(int active_ordinal
, int match_count
, bool finished
);
49 // Listener results are reported to.
52 // Used to check the validity of FindNext operations.
53 bool async_find_started_
;
54 bool sync_find_started_
;
56 // Used to provide different ids to each request and for result
57 // verification in asynchronous calls.
58 int find_request_id_counter_
;
59 int current_request_id_
;
61 // Required by FindNext and the incremental find replies.
62 base::string16 last_search_string_
;
63 int last_match_count_
;
64 int last_active_ordinal_
;
66 // Used to post synchronous result notifications to ourselves.
67 base::WeakPtrFactory
<FindHelper
> weak_factory_
;
69 DISALLOW_COPY_AND_ASSIGN(FindHelper
);
72 } // namespace android_webview
74 #endif // ANDROID_WEBVIEW_BROWSER_FIND_HELPER_H_