- add sources.
[platform/framework/web/crosswalk.git] / src / chrome_frame / custom_sync_call_context.h
1 // Copyright (c) 2011 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_FRAME_CUSTOM_SYNC_CALL_CONTEXT_H_
6 #define CHROME_FRAME_CUSTOM_SYNC_CALL_CONTEXT_H_
7
8 #include <vector>
9
10 #include "base/memory/ref_counted.h"
11 #include "base/synchronization/waitable_event.h"
12 #include "base/tuple.h"
13 #include "chrome_frame/sync_msg_reply_dispatcher.h"
14 #include "chrome_frame/chrome_frame_automation.h"
15 #include "ipc/ipc_sync_message.h"
16
17 // Class that maintains contextual information for the create and connect
18 // external tab operations.
19 class CreateExternalTabContext
20     : public SyncMessageReplyDispatcher::SyncMessageCallContext {
21  public:
22   typedef Tuple4<HWND, HWND, int, int> output_type;
23   explicit CreateExternalTabContext(ChromeFrameAutomationClient* client);
24
25   void Completed(HWND chrome_window, HWND tab_window, int tab_handle,
26                  int session_id);
27
28  private:
29   scoped_refptr<ChromeFrameAutomationClient> client_;
30 };
31
32 // This class maintains context information for the BeginNavigate operations
33 // pertaining to the external tab.
34 class BeginNavigateContext
35     : public SyncMessageReplyDispatcher::SyncMessageCallContext {
36  public:
37   explicit BeginNavigateContext(ChromeFrameAutomationClient* client);
38
39   typedef Tuple1<AutomationMsg_NavigationResponseValues> output_type;
40
41   void Completed(AutomationMsg_NavigationResponseValues response);
42
43  private:
44   scoped_refptr<ChromeFrameAutomationClient> client_;
45 };
46
47 // Class that maintains contextual information for the unload operation, i.e.
48 // when the user attempts to navigate away from a page rendered in ChromeFrame.
49 class UnloadContext
50     : public SyncMessageReplyDispatcher::SyncMessageCallContext {
51  public:
52   typedef Tuple1<bool> output_type;
53   UnloadContext(base::WaitableEvent* unload_done, bool* should_unload);
54
55   void Completed(bool should_unload);
56
57  private:
58   base::WaitableEvent* unload_done_;
59   bool* should_unload_;
60 };
61
62 #endif  // CHROME_FRAME_CUSTOM_SYNC_CALL_CONTEXT_H_