|
21 | 21 | #include "WebKitWebExtension.h"
|
22 | 22 |
|
23 | 23 | #include "APIDictionary.h"
|
24 |
| -#include "APIInjectedBundleBundleClient.h" |
25 | 24 | #include "APIString.h"
|
| 25 | +#include "WKBundleAPICast.h" |
| 26 | +#include "WKBundlePage.h" |
26 | 27 | #include "WebKitPrivate.h"
|
27 | 28 | #include "WebKitWebExtensionPrivate.h"
|
28 | 29 | #include "WebKitWebPagePrivate.h"
|
@@ -144,51 +145,67 @@ static void webkit_web_extension_class_init(WebKitWebExtensionClass* klass)
|
144 | 145 | WEBKIT_TYPE_WEB_PAGE);
|
145 | 146 | }
|
146 | 147 |
|
147 |
| -class WebExtensionInjectedBundleClient final : public API::InjectedBundle::Client { |
148 |
| -public: |
149 |
| - explicit WebExtensionInjectedBundleClient(WebKitWebExtension* extension) |
150 |
| - : m_extension(extension) |
151 |
| - { |
152 |
| - } |
153 |
| - |
154 |
| -private: |
155 |
| - void didCreatePage(InjectedBundle&, WebPage& page) override |
156 |
| - { |
157 |
| - GRefPtr<WebKitWebPage> webPage = adoptGRef(webkitWebPageCreate(&page)); |
158 |
| - m_extension->priv->pages.add(&page, webPage); |
159 |
| - g_signal_emit(m_extension, signals[PAGE_CREATED], 0, webPage.get()); |
160 |
| - } |
161 |
| - |
162 |
| - void willDestroyPage(InjectedBundle&, WebPage& page) override |
163 |
| - { |
164 |
| - m_extension->priv->pages.remove(&page); |
165 |
| - } |
166 |
| - |
167 |
| - void didReceiveMessage(InjectedBundle&, const String& messageName, API::Object* messageBody) override |
168 |
| - { |
169 |
| - ASSERT(messageBody->type() == API::Object::Type::Dictionary); |
170 |
| - API::Dictionary& message = *static_cast<API::Dictionary*>(messageBody); |
171 |
| - if (messageName == String::fromUTF8("PrefetchDNS")) { |
172 |
| - API::String* hostname = static_cast<API::String*>(message.get(String::fromUTF8("Hostname"))); |
173 |
| - WebProcess::singleton().prefetchDNS(hostname->string()); |
174 |
| - } else |
175 |
| - ASSERT_NOT_REACHED(); |
176 |
| - } |
177 |
| - |
178 |
| - void didReceiveMessageToPage(InjectedBundle&, WebPage& page, const String& messageName, API::Object* messageBody) override |
179 |
| - { |
180 |
| - ASSERT(messageBody->type() == API::Object::Type::Dictionary); |
181 |
| - if (auto* webPage = m_extension->priv->pages.get(&page)) |
182 |
| - webkitWebPageDidReceiveMessage(webPage, messageName, *static_cast<API::Dictionary*>(messageBody)); |
183 |
| - } |
184 |
| - |
185 |
| - WebKitWebExtension* m_extension; |
186 |
| -}; |
| 148 | +static void webkitWebExtensionPageCreated(WebKitWebExtension* extension, WebPage* page) |
| 149 | +{ |
| 150 | + GRefPtr<WebKitWebPage> webPage = adoptGRef(webkitWebPageCreate(page)); |
| 151 | + extension->priv->pages.add(page, webPage); |
| 152 | + g_signal_emit(extension, signals[PAGE_CREATED], 0, webPage.get()); |
| 153 | +} |
| 154 | + |
| 155 | +static void webkitWebExtensionPageDestroy(WebKitWebExtension* extension, WebPage* page) |
| 156 | +{ |
| 157 | + extension->priv->pages.remove(page); |
| 158 | +} |
| 159 | + |
| 160 | +static void webkitWebExtensionDidReceiveMessage(WebKitWebExtension*, const String& messageName, API::Dictionary& message) |
| 161 | +{ |
| 162 | + if (messageName == String::fromUTF8("PrefetchDNS")) { |
| 163 | + API::String* hostname = static_cast<API::String*>(message.get(String::fromUTF8("Hostname"))); |
| 164 | + WebProcess::singleton().prefetchDNS(hostname->string()); |
| 165 | + } else |
| 166 | + ASSERT_NOT_REACHED(); |
| 167 | +} |
| 168 | + |
| 169 | +static void didCreatePage(WKBundleRef, WKBundlePageRef page, const void* clientInfo) |
| 170 | +{ |
| 171 | + webkitWebExtensionPageCreated(WEBKIT_WEB_EXTENSION(clientInfo), toImpl(page)); |
| 172 | +} |
| 173 | + |
| 174 | +static void willDestroyPage(WKBundleRef, WKBundlePageRef page, const void* clientInfo) |
| 175 | +{ |
| 176 | + webkitWebExtensionPageDestroy(WEBKIT_WEB_EXTENSION(clientInfo), toImpl(page)); |
| 177 | +} |
| 178 | + |
| 179 | +static void didReceiveMessage(WKBundleRef, WKStringRef name, WKTypeRef messageBody, const void* clientInfo) |
| 180 | +{ |
| 181 | + ASSERT(WKGetTypeID(messageBody) == WKDictionaryGetTypeID()); |
| 182 | + webkitWebExtensionDidReceiveMessage(WEBKIT_WEB_EXTENSION(clientInfo), toImpl(name)->string(), *toImpl(static_cast<WKDictionaryRef>(messageBody))); |
| 183 | +} |
| 184 | + |
| 185 | +static void didReceiveMessageToPage(WKBundleRef, WKBundlePageRef page, WKStringRef name, WKTypeRef messageBody, const void* clientInfo) |
| 186 | +{ |
| 187 | + ASSERT(WKGetTypeID(messageBody) == WKDictionaryGetTypeID()); |
| 188 | + if (WebKitWebPage* webPage = WEBKIT_WEB_EXTENSION(clientInfo)->priv->pages.get(toImpl(page))) |
| 189 | + webkitWebPageDidReceiveMessage(webPage, toImpl(name)->string(), *toImpl(static_cast<WKDictionaryRef>(messageBody))); |
| 190 | +} |
187 | 191 |
|
188 | 192 | WebKitWebExtension* webkitWebExtensionCreate(InjectedBundle* bundle)
|
189 | 193 | {
|
190 | 194 | WebKitWebExtension* extension = WEBKIT_WEB_EXTENSION(g_object_new(WEBKIT_TYPE_WEB_EXTENSION, NULL));
|
191 |
| - bundle->setClient(std::make_unique<WebExtensionInjectedBundleClient>(extension)); |
| 195 | + |
| 196 | + WKBundleClientV1 wkBundleClient = { |
| 197 | + { |
| 198 | + 1, // version |
| 199 | + extension, // clientInfo |
| 200 | + }, |
| 201 | + didCreatePage, |
| 202 | + willDestroyPage, |
| 203 | + 0, // didInitializePageGroup |
| 204 | + didReceiveMessage, |
| 205 | + didReceiveMessageToPage |
| 206 | + }; |
| 207 | + WKBundleSetClient(toAPI(bundle), &wkBundleClient.base); |
| 208 | + |
192 | 209 | return extension;
|
193 | 210 | }
|
194 | 211 |
|
|
0 commit comments