Updating trunk VERSION from 2139.0 to 2140.0
[chromium-blink-merge.git] / android_webview / browser / find_helper.h
blobeabf19750c45c42b7461581232137615559afa7d
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 {
15 public:
16 class Listener {
17 public:
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,
22 int match_count,
23 bool finished) = 0;
24 virtual ~Listener() {}
27 explicit FindHelper(content::WebContents* web_contents);
28 virtual ~FindHelper();
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);
34 // Asynchronous API.
35 void FindAllAsync(const base::string16& search_string);
36 void HandleFindReply(int request_id,
37 int match_count,
38 int active_ordinal,
39 bool finished);
41 // Methods valid in both synchronous and asynchronous modes.
42 void FindNext(bool forward);
43 void ClearMatches();
45 private:
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.
50 Listener* listener_;
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_