diff options
Diffstat (limited to 'WebKit/android/WebCoreSupport')
| -rw-r--r-- | WebKit/android/WebCoreSupport/CookieClient.h | 46 | ||||
| -rw-r--r-- | WebKit/android/WebCoreSupport/MediaPlayerPrivateAndroid.cpp | 19 | ||||
| -rw-r--r-- | WebKit/android/WebCoreSupport/PlatformBridge.cpp | 66 |
3 files changed, 129 insertions, 2 deletions
diff --git a/WebKit/android/WebCoreSupport/CookieClient.h b/WebKit/android/WebCoreSupport/CookieClient.h new file mode 100644 index 0000000..56d9382 --- /dev/null +++ b/WebKit/android/WebCoreSupport/CookieClient.h @@ -0,0 +1,46 @@ +/* + * Copyright 2007, The Android Open Source Project + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef COOKIE_CLIENT_H +#define COOKIE_CLIENT_H + +#include <KURL.h> +#include <PlatformString.h> + +using namespace WebCore; + +namespace android { + +class CookieClient { + +public: + virtual ~CookieClient() {} + virtual void setCookies(const KURL& url, const String& value) = 0; + virtual String cookies(const KURL& url) = 0; + virtual bool cookiesEnabled() = 0; +}; + +} +#endif diff --git a/WebKit/android/WebCoreSupport/MediaPlayerPrivateAndroid.cpp b/WebKit/android/WebCoreSupport/MediaPlayerPrivateAndroid.cpp index 00e973e..1bb8802 100644 --- a/WebKit/android/WebCoreSupport/MediaPlayerPrivateAndroid.cpp +++ b/WebKit/android/WebCoreSupport/MediaPlayerPrivateAndroid.cpp @@ -121,7 +121,7 @@ bool MediaPlayerPrivate::hasAudio() const bool MediaPlayerPrivate::hasVideo() const { - return false; + return m_hasVideo; } void MediaPlayerPrivate::setVisible(bool visible) @@ -282,6 +282,7 @@ MediaPlayerPrivate::MediaPlayerPrivate(MediaPlayer* player) m_duration(6000), m_currentTime(0), m_paused(true), + m_hasVideo(false), m_readyState(MediaPlayer::HaveNothing), m_networkState(MediaPlayer::Empty), m_poster(0), @@ -352,6 +353,7 @@ void MediaPlayerPrivate::onPrepared(int duration, int width, int height) { m_duration = duration / 1000.0f; m_naturalSize = IntSize(width, height); m_naturalSizeUnknown = false; + m_hasVideo = true; m_player->durationChanged(); m_player->sizeChanged(); } @@ -361,6 +363,7 @@ void MediaPlayerPrivate::onEnded() { m_player->timeChanged(); m_paused = true; m_currentTime = 0; + m_hasVideo = false; m_networkState = MediaPlayer::Idle; m_readyState = MediaPlayer::HaveNothing; } @@ -379,6 +382,11 @@ void MediaPlayerPrivate::onPosterFetched(SkBitmap* poster) { } } +void MediaPlayerPrivate::onTimeupdate(int position) { + m_currentTime = position / 1000.0f; + m_player->timeChanged(); +} + } namespace android { @@ -408,6 +416,13 @@ static void OnPosterFetched(JNIEnv* env, jobject obj, jobject poster, int pointe player->onPosterFetched(posterNative); } +static void OnTimeupdate(JNIEnv* env, jobject obj, int position, int pointer) { + if (pointer) { + WebCore::MediaPlayerPrivate* player = reinterpret_cast<WebCore::MediaPlayerPrivate*>(pointer); + player->onTimeupdate(position); + } +} + /* * JNI registration */ @@ -418,6 +433,8 @@ static JNINativeMethod g_MediaPlayerMethods[] = { (void*) OnEnded }, { "nativeOnPosterFetched", "(Landroid/graphics/Bitmap;I)V", (void*) OnPosterFetched }, + { "nativeOnTimeupdate", "(II)V", + (void*) OnTimeupdate }, }; int register_mediaplayer(JNIEnv* env) diff --git a/WebKit/android/WebCoreSupport/PlatformBridge.cpp b/WebKit/android/WebCoreSupport/PlatformBridge.cpp index e93d3da..f36ecf7 100644 --- a/WebKit/android/WebCoreSupport/PlatformBridge.cpp +++ b/WebKit/android/WebCoreSupport/PlatformBridge.cpp @@ -24,11 +24,14 @@ */ #include "config.h" -#include "PlatformBridge.h" +#include <PlatformBridge.h> +#include "CookieClient.h" #include "JavaSharedClient.h" #include "KeyGeneratorClient.h" #include "WebViewCore.h" +#include <wtf/android/AndroidThreading.h> +#include <wtf/MainThread.h> using namespace android; @@ -68,4 +71,65 @@ String PlatformBridge::getSignedPublicKeyAndChallengeString(unsigned index, cons return client->getSignedPublicKeyAndChallengeString(index, challenge, url); } +void PlatformBridge::setCookies(const KURL& url, const String& value) +{ + CookieClient* client = JavaSharedClient::GetCookieClient(); + if (!client) + return; + + client->setCookies(url, value); +} + +String PlatformBridge::cookies(const KURL& url) +{ + CookieClient* client = JavaSharedClient::GetCookieClient(); + if (!client) + return String(); + + return client->cookies(url); +} + +bool PlatformBridge::cookiesEnabled() +{ + CookieClient* client = JavaSharedClient::GetCookieClient(); + if (!client) + return false; + + return client->cookiesEnabled(); } + +bool PlatformBridge::isWebViewPaused() +{ + return WebViewCore::isPaused(); +} + +} // namespace WebCore + + +// This is the implementation of AndroidThreading, which is declared in +// JavaScriptCore/wtf/android/AndroidThreading.h. It is provided here, rather +// than in its own source file, to avoid linker problems. +// +// By default, when building a shared library, the linker strips from static +// libraries any compilation units which do not contain any code referenced from +// that static library. Since +// AndroidThreading::scheduleDispatchFunctionsOnMainThread is not referenced +// from libwebcore.a, implementing it in its own compilation unit results in it +// being stripped. This stripping can be avoided by using the linker option +// --whole-archive for libwebcore.a, but this adds considerably to the size of +// libwebcore.so. + +namespace WTF { + +// Callback in the main thread. +static void timeoutFired(void*) +{ + dispatchFunctionsFromMainThread(); +} + +void AndroidThreading::scheduleDispatchFunctionsOnMainThread() +{ + JavaSharedClient::EnqueueFunctionPtr(timeoutFired, 0); +} + +} // namespace WTF |
