Home | History | Annotate | Download | only in chrome_frame
      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_
     63