summaryrefslogtreecommitdiffstats
path: root/WebCore
diff options
context:
space:
mode:
authorandroid-build SharedAccount <android-build@sekiwake.mtv.corp.google.com>2009-10-01 08:43:40 -0700
committerandroid-build SharedAccount <android-build@sekiwake.mtv.corp.google.com>2009-10-01 08:43:40 -0700
commita0d5dbfcbb7c62ec014dd3033ef3efac4ecd3b79 (patch)
treedc76673f3ef10079419f664badff73b5b3118e9d /WebCore
parent0fade321435f38382c614ade7b64e6b68440d747 (diff)
parent8b101d480f638c14f332d4be73a74925bfed1d82 (diff)
downloadexternal_webkit-a0d5dbfcbb7c62ec014dd3033ef3efac4ecd3b79.zip
external_webkit-a0d5dbfcbb7c62ec014dd3033ef3efac4ecd3b79.tar.gz
external_webkit-a0d5dbfcbb7c62ec014dd3033ef3efac4ecd3b79.tar.bz2
Merge commit 'goog/eclair' into eclair-release
Diffstat (limited to 'WebCore')
-rw-r--r--WebCore/html/HTMLInputElement.cpp10
-rw-r--r--WebCore/html/HTMLMediaElement.cpp11
-rw-r--r--WebCore/html/HTMLMediaElement.h3
-rw-r--r--WebCore/loader/FrameLoader.cpp5
-rw-r--r--WebCore/platform/android/RenderThemeAndroid.cpp10
-rw-r--r--WebCore/platform/graphics/MediaPlayer.cpp6
-rw-r--r--WebCore/platform/graphics/MediaPlayer.h1
-rw-r--r--WebCore/platform/graphics/MediaPlayerPrivate.h1
-rw-r--r--WebCore/platform/graphics/android/MediaPlayerPrivateAndroid.h17
-rw-r--r--WebCore/rendering/RenderPartObject.cpp26
-rw-r--r--WebCore/rendering/RenderWidget.cpp2
11 files changed, 71 insertions, 21 deletions
diff --git a/WebCore/html/HTMLInputElement.cpp b/WebCore/html/HTMLInputElement.cpp
index 88e14fd..59e4e2f 100644
--- a/WebCore/html/HTMLInputElement.cpp
+++ b/WebCore/html/HTMLInputElement.cpp
@@ -1113,16 +1113,12 @@ void HTMLInputElement::setValue(const String& value)
if (isTextField()) {
unsigned max = m_data.value().length();
- if (document()->focusedNode() == this)
#ifdef ANDROID_ACCEPT_CHANGES_TO_FOCUSED_TEXTFIELDS
- {
- // Make sure our UI side textfield changes to match the RenderTextControl
- android::WebViewCore::getWebViewCore(document()->view())->updateTextfield(this, false, value);
+ // Make sure our UI side textfield changes to match the RenderTextControl
+ android::WebViewCore::getWebViewCore(document()->view())->updateTextfield(this, false, value);
#endif
+ if (document()->focusedNode() == this)
InputElement::updateSelectionRange(this, this, max, max);
-#ifdef ANDROID_ACCEPT_CHANGES_TO_FOCUSED_TEXTFIELDS
- }
-#endif
else
cacheSelection(max, max);
}
diff --git a/WebCore/html/HTMLMediaElement.cpp b/WebCore/html/HTMLMediaElement.cpp
index 17a3110..f98200d 100644
--- a/WebCore/html/HTMLMediaElement.cpp
+++ b/WebCore/html/HTMLMediaElement.cpp
@@ -1446,6 +1446,13 @@ bool HTMLMediaElement::potentiallyPlaying() const
return !paused() && m_readyState >= HAVE_FUTURE_DATA && !endedPlayback() && !stoppedDueToErrors() && !pausedForUserInteraction();
}
+#if PLATFORM(ANDROID)
+bool HTMLMediaElement::couldPlayIfEnoughData() const
+{
+ return !paused() && !endedPlayback() && !stoppedDueToErrors() && !pausedForUserInteraction();
+}
+#endif
+
bool HTMLMediaElement::endedPlayback() const
{
if (!m_player || m_readyState < HAVE_METADATA)
@@ -1527,6 +1534,10 @@ void HTMLMediaElement::updatePlayState()
float time = currentTime();
if (m_lastSeekTime < time)
m_playedTimeRanges->add(m_lastSeekTime, time);
+#if PLATFORM(ANDROID)
+ } else if (couldPlayIfEnoughData() && playerPaused) {
+ m_player->prepareToPlay();
+#endif
}
if (renderer())
diff --git a/WebCore/html/HTMLMediaElement.h b/WebCore/html/HTMLMediaElement.h
index 27b48ea..70b686e 100644
--- a/WebCore/html/HTMLMediaElement.h
+++ b/WebCore/html/HTMLMediaElement.h
@@ -227,6 +227,9 @@ private:
bool endedPlayback() const;
bool stoppedDueToErrors() const;
bool pausedForUserInteraction() const;
+#if PLATFORM(ANDROID)
+ bool couldPlayIfEnoughData() const;
+#endif
float minTimeSeekable() const;
float maxTimeSeekable() const;
diff --git a/WebCore/loader/FrameLoader.cpp b/WebCore/loader/FrameLoader.cpp
index 5c81cfc..8e8540d 100644
--- a/WebCore/loader/FrameLoader.cpp
+++ b/WebCore/loader/FrameLoader.cpp
@@ -519,6 +519,9 @@ void FrameLoader::submitForm(const char* action, const String& url, PassRefPtr<F
}
FrameLoadRequest frameRequest;
+#ifdef ANDROID_USER_GESTURE
+ frameRequest.resourceRequest().setUserGesture(isProcessingUserGesture());
+#endif
String targetOrBaseTarget = target.isEmpty() ? m_frame->document()->baseTarget() : target;
Frame* targetFrame = findFrameForNavigation(targetOrBaseTarget);
@@ -1538,7 +1541,7 @@ void FrameLoader::loadURLIntoChildFrame(const KURL& url, const String& referer,
else
#endif
#ifdef ANDROID_USER_GESTURE
- childFrame->loader()->loadURL(workingURL, referer, String(), false, childLoadType, 0, 0, true);
+ childFrame->loader()->loadURL(workingURL, referer, String(), false, childLoadType, 0, 0, false);
#else
childFrame->loader()->loadURL(workingURL, referer, String(), false, childLoadType, 0, 0);
#endif
diff --git a/WebCore/platform/android/RenderThemeAndroid.cpp b/WebCore/platform/android/RenderThemeAndroid.cpp
index 0f419f5..51f404e 100644
--- a/WebCore/platform/android/RenderThemeAndroid.cpp
+++ b/WebCore/platform/android/RenderThemeAndroid.cpp
@@ -235,7 +235,7 @@ bool RenderThemeAndroid::paintTextArea(RenderObject* obj, const RenderObject::Pa
{
if (obj->isMenuList())
return paintCombo(obj, info, rect);
- return true;
+ return true;
}
void RenderThemeAndroid::adjustSearchFieldStyle(CSSStyleSelector*, RenderStyle* style, Element*) const
@@ -245,7 +245,7 @@ void RenderThemeAndroid::adjustSearchFieldStyle(CSSStyleSelector*, RenderStyle*
bool RenderThemeAndroid::paintSearchField(RenderObject*, const RenderObject::PaintInfo&, const IntRect&)
{
- return true;
+ return true;
}
void RenderThemeAndroid::adjustListboxStyle(CSSStyleSelector*, RenderStyle* style, Element*) const
@@ -259,12 +259,6 @@ static void adjustMenuListStyleCommon(RenderStyle* style, Element* e)
{
// Added to make room for our arrow.
style->setPaddingRight(Length(RenderSkinCombo::extraWidth(), Fixed));
- // Code copied from RenderThemeMac.mm
- // Makes sure that the text shows up on our treatment
- bool isEnabled = true;
- if (e)
- isEnabled = e->isEnabledFormControl();
- style->setColor(isEnabled ? Color::black : Color::darkGray);
}
void RenderThemeAndroid::adjustMenuListStyle(CSSStyleSelector*, RenderStyle* style, Element* e) const
diff --git a/WebCore/platform/graphics/MediaPlayer.cpp b/WebCore/platform/graphics/MediaPlayer.cpp
index 15815dc..531c598 100644
--- a/WebCore/platform/graphics/MediaPlayer.cpp
+++ b/WebCore/platform/graphics/MediaPlayer.cpp
@@ -107,6 +107,7 @@ public:
#if PLATFORM(ANDROID)
virtual bool canLoadPoster() const { return false; }
virtual void setPoster(const String&) { }
+ virtual void prepareToPlay() { }
#endif
#if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
@@ -263,6 +264,11 @@ bool MediaPlayer::canLoadPoster() const
{
return m_private->canLoadPoster();
}
+
+void MediaPlayer::prepareToPlay()
+{
+ m_private->prepareToPlay();
+}
#endif
#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) || PLATFORM(ANDROID)
diff --git a/WebCore/platform/graphics/MediaPlayer.h b/WebCore/platform/graphics/MediaPlayer.h
index 1cb7625..8eade50 100644
--- a/WebCore/platform/graphics/MediaPlayer.h
+++ b/WebCore/platform/graphics/MediaPlayer.h
@@ -187,6 +187,7 @@ public:
#if PLATFORM(ANDROID)
bool canLoadPoster() const;
void setPoster(const String&);
+ void prepareToPlay();
#endif
#if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
diff --git a/WebCore/platform/graphics/MediaPlayerPrivate.h b/WebCore/platform/graphics/MediaPlayerPrivate.h
index ba0f4b0..109ad10 100644
--- a/WebCore/platform/graphics/MediaPlayerPrivate.h
+++ b/WebCore/platform/graphics/MediaPlayerPrivate.h
@@ -95,6 +95,7 @@ public:
#if PLATFORM(ANDROID)
virtual bool canLoadPoster() const { return false; }
virtual void setPoster(const String&) { }
+ virtual void prepareToPlay() { }
#endif
#if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
diff --git a/WebCore/platform/graphics/android/MediaPlayerPrivateAndroid.h b/WebCore/platform/graphics/android/MediaPlayerPrivateAndroid.h
index 2d76ebb..812a337 100644
--- a/WebCore/platform/graphics/android/MediaPlayerPrivateAndroid.h
+++ b/WebCore/platform/graphics/android/MediaPlayerPrivateAndroid.h
@@ -28,6 +28,8 @@
#if ENABLE(VIDEO)
+class SkBitmap;
+
#include "MediaPlayerPrivate.h"
namespace WebCore {
@@ -79,11 +81,13 @@ public:
virtual bool canLoadPoster() const { return true; }
virtual void setPoster(const String&);
+ virtual void prepareToPlay();
virtual void paint(GraphicsContext*, const IntRect&);
void onPrepared(int duration, int width, int height);
void onEnded();
+ void onPosterFetched(SkBitmap*);
private:
// Android-specific methods and fields.
static MediaPlayerPrivateInterface* create(MediaPlayer* player);
@@ -97,10 +101,21 @@ private:
String m_url;
struct JavaGlue;
JavaGlue* m_glue;
+
float m_duration;
- IntSize m_size;
float m_currentTime;
+
bool m_paused;
+ MediaPlayer::ReadyState m_readyState;
+ MediaPlayer::NetworkState m_networkState;
+
+ SkBitmap* m_poster; // not owned
+ String m_posterUrl;
+
+ IntSize m_naturalSize;
+ bool m_naturalSizeUnknown;
+
+ bool m_isVisible;
};
} // namespace WebCore
diff --git a/WebCore/rendering/RenderPartObject.cpp b/WebCore/rendering/RenderPartObject.cpp
index 5f6d903..72298c6 100644
--- a/WebCore/rendering/RenderPartObject.cpp
+++ b/WebCore/rendering/RenderPartObject.cpp
@@ -386,11 +386,13 @@ void RenderPartObject::layout()
h = 0;
if (w != view->width() || h != view->height()) {
view->resize(w, h);
- root->setNeedsLayout(true, false);
}
+
// Layout the view.
- if (view->needsLayout())
+ do {
view->layout();
+ } while (view->layoutPending() || root->needsLayout());
+
int contentHeight = view->contentsHeight();
int contentWidth = view->contentsWidth();
// Only change the width or height if scrollbars are visible or
@@ -403,6 +405,20 @@ void RenderPartObject::layout()
// Update one last time
updateWidgetPosition();
+
+#if !ASSERT_DISABLED
+ ASSERT(!view->layoutPending());
+ ASSERT(!root->needsLayout());
+ // Sanity check when assertions are enabled.
+ RenderObject* c = root->nextInPreOrder();
+ while (c) {
+ ASSERT(!c->needsLayout());
+ c = c->nextInPreOrder();
+ }
+ Node* body = document()->body();
+ if (body)
+ ASSERT(!body->renderer()->needsLayout());
+#endif
}
}
}
@@ -446,8 +462,9 @@ void RenderPartObject::calcWidth() {
updateWidgetPosition();
// Layout to get the content width
- while (view->needsLayout())
+ do {
view->layout();
+ } while (view->layoutPending() || root->needsLayout());
setWidth(max(width(), view->contentsWidth() + extraWidth));
@@ -471,8 +488,9 @@ void RenderPartObject::calcHeight() {
updateWidgetPosition();
// Layout to get the content height
- while (view->needsLayout())
+ do {
view->layout();
+ } while (view->layoutPending() || root->needsLayout());
int extraHeight = paddingTop() + paddingBottom() + borderTop() + borderBottom();
setHeight(max(width(), view->contentsHeight() + extraHeight));
diff --git a/WebCore/rendering/RenderWidget.cpp b/WebCore/rendering/RenderWidget.cpp
index 16526ca..36f4fed 100644
--- a/WebCore/rendering/RenderWidget.cpp
+++ b/WebCore/rendering/RenderWidget.cpp
@@ -255,6 +255,7 @@ void RenderWidget::updateWidgetPosition()
deref(arena);
}
+#ifndef FLATTEN_IFRAME
// if the frame bounds got changed, or if view needs layout (possibly indicating
// content size is wrong) we have to do a layout to set the right widget size
if (m_widget->isFrameView()) {
@@ -262,6 +263,7 @@ void RenderWidget::updateWidgetPosition()
if (boundsChanged || frameView->needsLayout())
frameView->layout();
}
+#endif
}
void RenderWidget::setSelectionState(SelectionState state)