1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this
5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 
7 #ifndef mozilla_dom_MessageManagerGlobal_h
8 #define mozilla_dom_MessageManagerGlobal_h
9 
10 #include "nsFrameMessageManager.h"
11 #include "mozilla/ErrorResult.h"
12 
13 namespace mozilla {
14 namespace dom {
15 
16 /**
17  * Base class for implementing the WebIDL MessageManagerGlobal class.
18  */
19 class MessageManagerGlobal {
20  public:
21   // MessageListenerManager
AddMessageListener(const nsAString & aMessageName,MessageListener & aListener,bool aListenWhenClosed,ErrorResult & aError)22   void AddMessageListener(const nsAString& aMessageName,
23                           MessageListener& aListener, bool aListenWhenClosed,
24                           ErrorResult& aError) {
25     if (!mMessageManager) {
26       aError.Throw(NS_ERROR_NOT_INITIALIZED);
27       return;
28     }
29     mMessageManager->AddMessageListener(aMessageName, aListener,
30                                         aListenWhenClosed, aError);
31   }
RemoveMessageListener(const nsAString & aMessageName,MessageListener & aListener,ErrorResult & aError)32   void RemoveMessageListener(const nsAString& aMessageName,
33                              MessageListener& aListener, ErrorResult& aError) {
34     if (!mMessageManager) {
35       aError.Throw(NS_ERROR_NOT_INITIALIZED);
36       return;
37     }
38     mMessageManager->RemoveMessageListener(aMessageName, aListener, aError);
39   }
AddWeakMessageListener(const nsAString & aMessageName,MessageListener & aListener,ErrorResult & aError)40   void AddWeakMessageListener(const nsAString& aMessageName,
41                               MessageListener& aListener, ErrorResult& aError) {
42     if (!mMessageManager) {
43       aError.Throw(NS_ERROR_NOT_INITIALIZED);
44       return;
45     }
46     mMessageManager->AddWeakMessageListener(aMessageName, aListener, aError);
47   }
RemoveWeakMessageListener(const nsAString & aMessageName,MessageListener & aListener,ErrorResult & aError)48   void RemoveWeakMessageListener(const nsAString& aMessageName,
49                                  MessageListener& aListener,
50                                  ErrorResult& aError) {
51     if (!mMessageManager) {
52       aError.Throw(NS_ERROR_NOT_INITIALIZED);
53       return;
54     }
55     mMessageManager->RemoveWeakMessageListener(aMessageName, aListener, aError);
56   }
57 
58   // MessageSender
SendAsyncMessage(JSContext * aCx,const nsAString & aMessageName,JS::Handle<JS::Value> aObj,JS::Handle<JS::Value> aTransfers,ErrorResult & aError)59   void SendAsyncMessage(JSContext* aCx, const nsAString& aMessageName,
60                         JS::Handle<JS::Value> aObj,
61                         JS::Handle<JS::Value> aTransfers, ErrorResult& aError) {
62     if (!mMessageManager) {
63       aError.Throw(NS_ERROR_NOT_INITIALIZED);
64       return;
65     }
66     mMessageManager->SendAsyncMessage(aCx, aMessageName, aObj, aTransfers,
67                                       aError);
68   }
GetProcessMessageManager(mozilla::ErrorResult & aError)69   already_AddRefed<ProcessMessageManager> GetProcessMessageManager(
70       mozilla::ErrorResult& aError) {
71     if (!mMessageManager) {
72       aError.Throw(NS_ERROR_NOT_INITIALIZED);
73       return nullptr;
74     }
75     return mMessageManager->GetProcessMessageManager(aError);
76   }
77 
GetRemoteType(nsACString & aRemoteType,mozilla::ErrorResult & aError)78   void GetRemoteType(nsACString& aRemoteType, mozilla::ErrorResult& aError) {
79     if (!mMessageManager) {
80       aError.Throw(NS_ERROR_NOT_INITIALIZED);
81       return;
82     }
83     mMessageManager->GetRemoteType(aRemoteType, aError);
84   }
85 
86   // SyncMessageSender
SendSyncMessage(JSContext * aCx,const nsAString & aMessageName,JS::Handle<JS::Value> aObj,nsTArray<JS::Value> & aResult,ErrorResult & aError)87   void SendSyncMessage(JSContext* aCx, const nsAString& aMessageName,
88                        JS::Handle<JS::Value> aObj, nsTArray<JS::Value>& aResult,
89                        ErrorResult& aError) {
90     if (!mMessageManager) {
91       aError.Throw(NS_ERROR_NOT_INITIALIZED);
92       return;
93     }
94     mMessageManager->SendSyncMessage(aCx, aMessageName, aObj, aResult, aError);
95   }
96 
97   // MessageManagerGlobal
98   void Dump(const nsAString& aStr);
99   void Atob(const nsAString& aAsciiString, nsAString& aBase64Data,
100             ErrorResult& aError);
101   void Btoa(const nsAString& aBase64Data, nsAString& aAsciiString,
102             ErrorResult& aError);
103 
MarkForCC()104   void MarkForCC() {
105     if (mMessageManager) {
106       mMessageManager->MarkForCC();
107     }
108   }
109 
110  protected:
MessageManagerGlobal(nsFrameMessageManager * aMessageManager)111   explicit MessageManagerGlobal(nsFrameMessageManager* aMessageManager)
112       : mMessageManager(aMessageManager) {}
113 
114   RefPtr<nsFrameMessageManager> mMessageManager;
115 };
116 
117 }  // namespace dom
118 }  // namespace mozilla
119 
120 #endif  // mozilla_dom_MessageManagerGlobal_h
121