diff --git a/cef.gyp b/cef.gyp index 6181c48da..cdb451dea 100644 --- a/cef.gyp +++ b/cef.gyp @@ -405,6 +405,7 @@ 'libcef/browser_resource_loader_bridge.h', 'libcef/browser_socket_stream_bridge.cc', 'libcef/browser_socket_stream_bridge.h', + 'libcef/browser_web_worker.h', 'libcef/browser_webcookiejar_impl.cc', 'libcef/browser_webcookiejar_impl.h', 'libcef/browser_webblobregistry_impl.cc', diff --git a/libcef/browser_web_worker.h b/libcef/browser_web_worker.h new file mode 100644 index 000000000..95795ad7d --- /dev/null +++ b/libcef/browser_web_worker.h @@ -0,0 +1,101 @@ +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BROWSER_WEB_WORKER_H_ +#define BROWSER_WEB_WORKER_H_ + +#include "base/basictypes.h" +#include "base/ref_counted.h" +#include "third_party/WebKit/WebKit/chromium/public/WebMessagePortChannel.h" +#include "third_party/WebKit/WebKit/chromium/public/WebWorker.h" +#include "third_party/WebKit/WebKit/chromium/public/WebWorkerClient.h" + +namespace WebKit { +class WebApplicationCacheHost; +class WebApplicationCacheHostClient; +class WebFrame; +class WebNotificationPresenter; +class WebString; +class WebURL; +} + +// WebWorkers are not currently functional in CEF. This class effectively +// stubs things out. +class BrowserWebWorker : public WebKit::WebWorker, + public WebKit::WebWorkerClient, + public base::RefCounted { + public: + BrowserWebWorker() { + AddRef(); // Adds the reference held for worker object. + AddRef(); // Adds the reference held for worker context object. + } + + // WebWorker methods: + virtual void startWorkerContext(const WebKit::WebURL& script_url, + const WebKit::WebString& user_agent, + const WebKit::WebString& source_code) { + } + virtual void terminateWorkerContext() { + } + virtual void postMessageToWorkerContext( + const WebKit::WebString& message, + const WebKit::WebMessagePortChannelArray& channel) { + } + virtual void workerObjectDestroyed() { + Release(); // Releases the reference held for worker object. + } + virtual void clientDestroyed() { + } + + // WebWorkerClient methods: + virtual void postMessageToWorkerObject( + const WebKit::WebString& message, + const WebKit::WebMessagePortChannelArray& channel) { + } + virtual void postExceptionToWorkerObject( + const WebKit::WebString& error_message, + int line_number, + const WebKit::WebString& source_url) { + } + virtual void postConsoleMessageToWorkerObject( + int destination_id, + int source_id, + int message_type, + int message_level, + const WebKit::WebString& message, + int line_number, + const WebKit::WebString& source_url) { + } + virtual void confirmMessageFromWorkerObject(bool has_pending_activity) { } + virtual void reportPendingActivity(bool has_pending_activity) { } + virtual void workerContextClosed() { } + virtual void workerContextDestroyed() { + Release(); // Releases the reference held for worker context object. + } + virtual WebKit::WebWorker* createWorker(WebKit::WebWorkerClient* client) { + return NULL; + } + virtual WebKit::WebNotificationPresenter* notificationPresenter() { + return NULL; + } + virtual WebKit::WebApplicationCacheHost* createApplicationCacheHost( + WebKit::WebApplicationCacheHostClient*) { + return NULL; + } + virtual bool allowDatabase(WebKit::WebFrame* frame, + const WebKit::WebString& name, + const WebKit::WebString& display_name, + unsigned long estimated_size) { + return true; + } + + private: + friend class base::RefCounted; + + ~BrowserWebWorker() {} + + DISALLOW_COPY_AND_ASSIGN(BrowserWebWorker); +}; + +#endif // BROWSER_WEB_WORKER_H_ diff --git a/libcef/browser_webview_delegate.cc b/libcef/browser_webview_delegate.cc index 42f18f6e9..ddcc125f4 100644 --- a/libcef/browser_webview_delegate.cc +++ b/libcef/browser_webview_delegate.cc @@ -11,6 +11,7 @@ #include "browser_appcache_system.h" #include "browser_impl.h" #include "browser_navigation_controller.h" +#include "browser_web_worker.h" #include "cef_context.h" #include "request_impl.h" #include "v8_impl.h" @@ -527,6 +528,11 @@ WebPlugin* BrowserWebViewDelegate::createPlugin( frame, params, info.path, actual_mime_type, AsWeakPtr()); } +WebWorker* BrowserWebViewDelegate::createWorker( + WebFrame* frame, WebWorkerClient* client) { + return new BrowserWebWorker(); +} + WebMediaPlayer* BrowserWebViewDelegate::createMediaPlayer( WebFrame* frame, WebMediaPlayerClient* client) { media::MediaFilterCollection collection; diff --git a/libcef/browser_webview_delegate.h b/libcef/browser_webview_delegate.h index 65ccd7005..185fdfec2 100644 --- a/libcef/browser_webview_delegate.h +++ b/libcef/browser_webview_delegate.h @@ -132,6 +132,8 @@ class BrowserWebViewDelegate : public WebKit::WebViewClient, // WebKit::WebFrameClient virtual WebKit::WebPlugin* createPlugin( WebKit::WebFrame*, const WebKit::WebPluginParams&); + virtual WebKit::WebWorker* createWorker( + WebKit::WebFrame*, WebKit::WebWorkerClient*); virtual WebKit::WebMediaPlayer* createMediaPlayer( WebKit::WebFrame*, WebKit::WebMediaPlayerClient*); virtual WebKit::WebApplicationCacheHost* createApplicationCacheHost(