Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / test / base / find_in_page_observer.h
1 // Copyright 2013 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_TEST_BASE_FIND_IN_PAGE_OBSERVER_H_
6 #define CHROME_TEST_BASE_FIND_IN_PAGE_OBSERVER_H_
7
8 #include "base/memory/ref_counted.h"
9 #include "content/public/browser/notification_observer.h"
10 #include "content/public/browser/notification_registrar.h"
11 #include "ui/gfx/rect.h"
12
13 namespace content {
14 class MessageLoopRunner;
15 class WebContents;
16 }
17
18 namespace ui_test_utils {
19
20 // FindInPageNotificationObserver allows blocking UI thread until find results
21 // are available. Typical usage:
22 // FindInPageWchar();
23 // FindInPageNotificationObserver observer(tab);
24 // observer.Wait();
25
26 // Always construct FindInPageNotificationObserver AFTER initiating the search.
27 // It captures the current search ID in constructor and waits for it only.
28 class FindInPageNotificationObserver : public content::NotificationObserver {
29  public:
30   explicit FindInPageNotificationObserver(content::WebContents* parent_tab);
31   ~FindInPageNotificationObserver() override;
32
33   void Wait();
34
35   int active_match_ordinal() const { return active_match_ordinal_; }
36   int number_of_matches() const { return number_of_matches_; }
37   gfx::Rect selection_rect() const { return selection_rect_; }
38
39  private:
40   void Observe(int type,
41                const content::NotificationSource& source,
42                const content::NotificationDetails& details) override;
43
44   content::NotificationRegistrar registrar_;
45   // We will at some point (before final update) be notified of the ordinal and
46   // we need to preserve it so we can send it later.
47   int active_match_ordinal_;
48   int number_of_matches_;
49   gfx::Rect selection_rect_;
50   // The id of the current find request, obtained from WebContents. Allows us
51   // to monitor when the search completes.
52   int current_find_request_id_;
53   scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
54
55   bool seen_; // true after transition to expected state has been seen
56   bool running_; // indicates whether message loop is running
57
58   DISALLOW_COPY_AND_ASSIGN(FindInPageNotificationObserver);
59 };
60
61 }  // namespace ui_test_utils
62
63 #endif  // CHROME_TEST_BASE_FIND_IN_PAGE_OBSERVER_H_