1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_widget_GeckoViewSupport_h
#define mozilla_widget_GeckoViewSupport_h
#include "mozilla/java/GeckoResultWrappers.h"
#include "mozilla/java/GeckoSessionNatives.h"
#include "mozilla/java/WebResponseWrappers.h"
#include "mozilla/widget/WindowEvent.h"
class nsWindow;
namespace mozilla {
namespace widget {
class GeckoViewSupport final
: public java::GeckoSession::Window::Natives<GeckoViewSupport> {
RefPtr<nsWindow> mWindow;
// We hold a WeakRef because we want to allow the
// GeckoSession.Window to be garbage collected.
// Callers need to create a LocalRef from this
// before calling methods.
java::GeckoSession::Window::WeakRef mGeckoViewWindow;
public:
typedef java::GeckoSession::Window::Natives<GeckoViewSupport> Base;
template <typename Functor>
static void OnNativeCall(Functor&& aCall) {
NS_DispatchToMainThread(new WindowEvent<Functor>(std::move(aCall)));
}
GeckoViewSupport(nsWindow* aWindow,
const java::GeckoSession::Window::LocalRef& aInstance,
nsPIDOMWindowOuter* aDOMWindow)
: mWindow(aWindow), mGeckoViewWindow(aInstance), mDOMWindow(aDOMWindow) {}
~GeckoViewSupport();
nsWindow* GetNsWindow() const { return mWindow; }
using Base::DisposeNative;
/**
* GeckoView methods
*/
private:
nsCOMPtr<nsPIDOMWindowOuter> mDOMWindow;
bool mIsReady{false};
public:
// Create and attach a window.
static void Open(const jni::Class::LocalRef& aCls,
java::GeckoSession::Window::Param aWindow,
jni::Object::Param aQueue, jni::Object::Param aCompositor,
jni::Object::Param aDispatcher,
jni::Object::Param aSessionAccessibility,
jni::Object::Param aInitData, jni::String::Param aId,
jni::String::Param aChromeURI, int32_t aScreenId,
bool aPrivateMode);
// Close and destroy the nsWindow.
void Close();
// Transfer this nsWindow to new GeckoSession objects.
void Transfer(const java::GeckoSession::Window::LocalRef& inst,
jni::Object::Param aQueue, jni::Object::Param aCompositor,
jni::Object::Param aDispatcher,
jni::Object::Param aSessionAccessibility,
jni::Object::Param aInitData);
void AttachEditable(const java::GeckoSession::Window::LocalRef& inst,
jni::Object::Param aEditableParent);
void AttachAccessibility(const java::GeckoSession::Window::LocalRef& inst,
jni::Object::Param aSessionAccessibility);
void OnReady(jni::Object::Param aQueue = nullptr);
auto OnLoadRequest(mozilla::jni::String::Param aUri, int32_t aWindowType,
int32_t aFlags, mozilla::jni::String::Param aTriggeringUri,
bool aHasUserGesture, bool aIsTopLevel) const
-> java::GeckoResult::LocalRef;
void PassExternalResponse(java::WebResponse::Param aResponse);
void AttachMediaSessionController(
const java::GeckoSession::Window::LocalRef& inst,
jni::Object::Param aController, const int64_t aId);
void DetachMediaSessionController(
const java::GeckoSession::Window::LocalRef& inst,
jni::Object::Param aController);
void OnWeakNonIntrusiveDetach(already_AddRefed<Runnable> aDisposer) {
RefPtr<Runnable> disposer(aDisposer);
disposer->Run();
}
};
} // namespace widget
} // namespace mozilla
#endif // mozilla_widget_GeckoViewSupport_h
|