summaryrefslogtreecommitdiffstats
path: root/WebCore/html
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2010-08-04 11:41:34 +0100
committerSteve Block <steveblock@google.com>2010-08-09 12:04:44 +0100
commitdb14019a23d96bc8a444b6576a5da8bd1cfbc8b0 (patch)
tree9f793c5b0f5e1f2aca8247158920e2c4bf962bbf /WebCore/html
parentbf916837aa84f1e4b00e6ed6268516c2acd27545 (diff)
downloadexternal_webkit-db14019a23d96bc8a444b6576a5da8bd1cfbc8b0.zip
external_webkit-db14019a23d96bc8a444b6576a5da8bd1cfbc8b0.tar.gz
external_webkit-db14019a23d96bc8a444b6576a5da8bd1cfbc8b0.tar.bz2
Merge WebKit at r64523 : Initial merge by git.
Change-Id: Ibb796c6802e757b1d9b40f58205cfbe4da95fcd4
Diffstat (limited to 'WebCore/html')
-rw-r--r--WebCore/html/FileThread.cpp14
-rw-r--r--WebCore/html/FileThread.h15
-rw-r--r--WebCore/html/FileThreadTask.h134
-rw-r--r--WebCore/html/HTMLFrameSetElement.cpp4
-rw-r--r--WebCore/html/HTMLInputElement.idl2
-rw-r--r--WebCore/html/HTMLStyleElement.cpp39
-rw-r--r--WebCore/html/HTMLStyleElement.h10
-rw-r--r--WebCore/html/canvas/CanvasRenderingContext.h1
-rw-r--r--WebCore/html/canvas/CanvasRenderingContext2D.cpp27
-rw-r--r--WebCore/html/canvas/CanvasRenderingContext2D.h1
-rw-r--r--WebCore/html/canvas/WebGLRenderingContext.h1
11 files changed, 114 insertions, 134 deletions
diff --git a/WebCore/html/FileThread.cpp b/WebCore/html/FileThread.cpp
index 02b1718..3a3413c 100644
--- a/WebCore/html/FileThread.cpp
+++ b/WebCore/html/FileThread.cpp
@@ -61,7 +61,7 @@ bool FileThread::start()
void FileThread::stop()
{
- return m_queue.kill();
+ m_queue.kill();
}
void FileThread::postTask(PassOwnPtr<Task> task)
@@ -69,17 +69,17 @@ void FileThread::postTask(PassOwnPtr<Task> task)
m_queue.append(task);
}
-class SameFilePredicate {
+class SameInstancePredicate {
public:
- SameFilePredicate(const FileStream* stream) : m_stream(stream) { }
- bool operator()(FileThread::Task* task) const { return task->stream() == m_stream; }
+ SameInstancePredicate(const void* instance) : m_instance(instance) { }
+ bool operator()(FileThread::Task* task) const { return task->instance() == m_instance; }
private:
- const FileStream* m_stream;
+ const void* m_instance;
};
-void FileThread::unscheduleTasks(const FileStream* stream)
+void FileThread::unscheduleTasks(const void* instance)
{
- SameFilePredicate predicate(stream);
+ SameInstancePredicate predicate(instance);
m_queue.removeIf(predicate);
}
diff --git a/WebCore/html/FileThread.h b/WebCore/html/FileThread.h
index d27273a..2eba98e 100644
--- a/WebCore/html/FileThread.h
+++ b/WebCore/html/FileThread.h
@@ -44,7 +44,11 @@ class FileStream;
class FileThread : public ThreadSafeShared<FileThread> {
public:
- static PassRefPtr<FileThread> create() { return adoptRef(new FileThread()); }
+ static PassRefPtr<FileThread> create()
+ {
+ return adoptRef(new FileThread());
+ }
+
~FileThread();
bool start();
@@ -54,14 +58,15 @@ public:
public:
virtual ~Task() { }
virtual void performTask() = 0;
- FileStream* stream() const { return m_stream; }
+ void* instance() const { return m_instance; }
protected:
- Task(FileStream* stream) : m_stream(stream) { }
- FileStream* m_stream;
+ Task(void* instance) : m_instance(instance) { }
+ void* m_instance;
};
void postTask(PassOwnPtr<Task> task);
- void unscheduleTasks(const FileStream*);
+
+ void unscheduleTasks(const void* instance);
private:
FileThread();
diff --git a/WebCore/html/FileThreadTask.h b/WebCore/html/FileThreadTask.h
index de11798..09b647f 100644
--- a/WebCore/html/FileThreadTask.h
+++ b/WebCore/html/FileThreadTask.h
@@ -32,73 +32,55 @@
#define FileThreadTask_h
#include "CrossThreadCopier.h"
+#include "CrossThreadTask.h"
#include "FileThread.h"
-#include <memory>
#include <wtf/PassOwnPtr.h>
#include <wtf/PassRefPtr.h>
-#include <wtf/TypeTraits.h>
namespace WebCore {
-// Traits for the Task.
-template<typename T> struct FileThreadTaskTraits {
- typedef const T& ParamType;
-};
-
-template<typename T> struct FileThreadTaskTraits<T*> {
- typedef T* ParamType;
-};
-
-template<typename T> struct FileThreadTaskTraits<PassRefPtr<T> > {
- typedef PassRefPtr<T> ParamType;
-};
-
-template<typename T> struct FileThreadTaskTraits<PassOwnPtr<T> > {
- typedef PassOwnPtr<T> ParamType;
-};
-
-template<typename R>
+template<typename R, typename T>
class FileThreadTask0 : public FileThread::Task {
public:
- typedef R (FileStream::*Method)();
- typedef FileThreadTask0<R> FileThreadTask;
+ typedef R (T::*Method)();
+ typedef FileThreadTask0<R, T> FileThreadTaskImpl;
- static PassOwnPtr<FileThreadTask> create(FileStream* stream, Method method)
+ static PassOwnPtr<FileThreadTaskImpl> create(T* instance, Method method)
{
- return new FileThreadTask(stream, method);
+ return new FileThreadTaskImpl(instance, method);
}
private:
- FileThreadTask0(FileStream* stream, Method method)
- : FileThread::Task(stream)
+ FileThreadTask0(T* instance, Method method)
+ : FileThread::Task(instance)
, m_method(method)
{
}
virtual void performTask()
{
- (*stream().*m_method)();
+ (*static_cast<T*>(instance()).*m_method)();
}
private:
Method m_method;
};
-template<typename R, typename P1, typename MP1>
+template<typename R, typename T, typename P1, typename MP1>
class FileThreadTask1 : public FileThread::Task {
public:
- typedef R (FileStream::*Method)(MP1);
- typedef FileThreadTask1<R, P1, MP1> FileThreadTask;
- typedef typename FileThreadTaskTraits<P1>::ParamType Param1;
+ typedef R (T::*Method)(MP1);
+ typedef FileThreadTask1<R, T, P1, MP1> FileThreadTaskImpl;
+ typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
- static PassOwnPtr<FileThreadTask> create(FileStream* stream, Method method, Param1 parameter1)
+ static PassOwnPtr<FileThreadTaskImpl> create(T* instance, Method method, Param1 parameter1)
{
- return new FileThreadTask(stream, method, parameter1);
+ return new FileThreadTaskImpl(instance, method, parameter1);
}
private:
- FileThreadTask1(FileStream* stream, Method method, Param1 parameter1)
- : FileThread::Task(stream)
+ FileThreadTask1(T* instance, Method method, Param1 parameter1)
+ : FileThread::Task(instance)
, m_method(method)
, m_parameter1(parameter1)
{
@@ -106,7 +88,7 @@ private:
virtual void performTask()
{
- (*stream().*m_method)(m_parameter1);
+ (*static_cast<T*>(instance()).*m_method)(m_parameter1);
}
private:
@@ -114,22 +96,22 @@ private:
P1 m_parameter1;
};
-template<typename R, typename P1, typename MP1, typename P2, typename MP2>
+template<typename R, typename T, typename P1, typename MP1, typename P2, typename MP2>
class FileThreadTask2 : public FileThread::Task {
public:
- typedef R (FileStream::*Method)(MP1, MP2);
- typedef FileThreadTask2<R, P1, MP1, P2, MP2> FileThreadTask;
- typedef typename FileThreadTaskTraits<P1>::ParamType Param1;
- typedef typename FileThreadTaskTraits<P2>::ParamType Param2;
+ typedef R (T::*Method)(MP1, MP2);
+ typedef FileThreadTask2<R, T, P1, MP1, P2, MP2> FileThreadTaskImpl;
+ typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
+ typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
- static PassOwnPtr<FileThreadTask> create(FileStream* stream, Method method, Param1 parameter1, Param2 parameter2)
+ static PassOwnPtr<FileThreadTaskImpl> create(T* instance, Method method, Param1 parameter1, Param2 parameter2)
{
- return new FileThreadTask(stream, method, parameter1, parameter2);
+ return new FileThreadTaskImpl(instance, method, parameter1, parameter2);
}
private:
- FileThreadTask2(FileStream* stream, Method method, Param1 parameter1, Param2 parameter2)
- : FileThread::Task(stream)
+ FileThreadTask2(T* instance, Method method, Param1 parameter1, Param2 parameter2)
+ : FileThread::Task(instance)
, m_method(method)
, m_parameter1(parameter1)
, m_parameter2(parameter2)
@@ -138,7 +120,7 @@ private:
virtual void performTask()
{
- (*stream().*m_method)(m_parameter1, m_parameter2);
+ (*static_cast<T*>(instance()).*m_method)(m_parameter1, m_parameter2);
}
private:
@@ -147,23 +129,23 @@ private:
P2 m_parameter2;
};
-template<typename R, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3>
+template<typename R, typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3>
class FileThreadTask3 : public FileThread::Task {
public:
- typedef R (FileStream::*Method)(MP1, MP2, MP3);
- typedef FileThreadTask3<R, P1, MP1, P2, MP2, P3, MP3> FileThreadTask;
- typedef typename FileThreadTaskTraits<P1>::ParamType Param1;
- typedef typename FileThreadTaskTraits<P2>::ParamType Param2;
- typedef typename FileThreadTaskTraits<P3>::ParamType Param3;
+ typedef void (T::*Method)(MP1, MP2, MP3);
+ typedef FileThreadTask3<R, T, P1, MP1, P2, MP2, P3, MP3> FileThreadTaskImpl;
+ typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
+ typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
+ typedef typename CrossThreadTaskTraits<P3>::ParamType Param3;
- static PassOwnPtr<FileThreadTask> create(FileStream* stream, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3)
+ static PassOwnPtr<FileThreadTaskImpl> create(T* instance, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3)
{
- return new FileThreadTask(stream, method, parameter1, parameter2, parameter3);
+ return new FileThreadTaskImpl(instance, method, parameter1, parameter2, parameter3);
}
private:
- FileThreadTask3(FileStream* stream, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3)
- : FileThread::Task(stream)
+ FileThreadTask3(T* instance, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3)
+ : FileThread::Task(instance)
, m_method(method)
, m_parameter1(parameter1)
, m_parameter2(parameter2)
@@ -173,7 +155,7 @@ private:
virtual void performTask()
{
- (*stream().*m_method)(m_parameter1, m_parameter2, m_parameter3);
+ (*static_cast<T*>(instance()).*m_method)(m_parameter1, m_parameter2, m_parameter3);
}
private:
@@ -183,56 +165,56 @@ private:
P3 m_parameter3;
};
-template<typename R>
+template<typename R, typename T>
PassOwnPtr<FileThread::Task> createFileThreadTask(
- FileStream* const callee,
- R (FileStream::*method)());
+ T* const callee,
+ R (T::*method)());
-template<typename R>
+template<typename R, typename T>
PassOwnPtr<FileThread::Task> createFileThreadTask(
- FileStream* const callee,
- R (FileStream::*method)())
+ T* const callee,
+ R (T::*method)())
{
- return FileThreadTask0<R>::create(
+ return FileThreadTask0<R, T>::create(
callee,
method);
}
-template<typename R, typename P1, typename MP1>
+template<typename R, typename T, typename P1, typename MP1>
PassOwnPtr<FileThread::Task> createFileThreadTask(
- FileStream* const callee,
- R (FileStream::*method)(MP1),
+ T* const callee,
+ R (T::*method)(MP1),
const P1& parameter1)
{
- return FileThreadTask1<R, typename CrossThreadCopier<P1>::Type, MP1>::create(
+ return FileThreadTask1<R, T, typename CrossThreadCopier<P1>::Type, MP1>::create(
callee,
method,
CrossThreadCopier<P1>::copy(parameter1));
}
-template<typename R, typename P1, typename MP1, typename P2, typename MP2>
+template<typename R, typename T, typename P1, typename MP1, typename P2, typename MP2>
PassOwnPtr<FileThread::Task> createFileThreadTask(
- FileStream* const callee,
- R (FileStream::*method)(MP1, MP2),
+ T* const callee,
+ R (T::*method)(MP1, MP2),
const P1& parameter1,
const P2& parameter2)
{
- return FileThreadTask2<R, typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2>::create(
+ return FileThreadTask2<R, T, typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2>::create(
callee,
method,
CrossThreadCopier<P1>::copy(parameter1),
CrossThreadCopier<P2>::copy(parameter2));
}
-template<typename R, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3>
+template<typename R, typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3>
PassOwnPtr<FileThread::Task> createFileThreadTask(
- FileStream* const callee,
- R (FileStream::*method)(MP1, MP2, MP3),
+ T* const callee,
+ R (T::*method)(MP1, MP2, MP3),
const P1& parameter1,
const P2& parameter2,
const P3& parameter3)
{
- return FileThreadTask3<R, typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2, typename CrossThreadCopier<P3>::Type, MP3>::create(
+ return FileThreadTask3<R, T, typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2, typename CrossThreadCopier<P3>::Type, MP3>::create(
callee,
method,
CrossThreadCopier<P1>::copy(parameter1),
diff --git a/WebCore/html/HTMLFrameSetElement.cpp b/WebCore/html/HTMLFrameSetElement.cpp
index 1b38a1d..d0f84ef 100644
--- a/WebCore/html/HTMLFrameSetElement.cpp
+++ b/WebCore/html/HTMLFrameSetElement.cpp
@@ -208,10 +208,14 @@ void HTMLFrameSetElement::recalcStyle(StyleChange ch)
{
if (needsStyleRecalc() && renderer()) {
renderer()->setNeedsLayout(true);
+<<<<<<< HEAD
#ifdef ANDROID_FLATTEN_FRAMESET
static_cast<RenderFrameSet*>(renderer())->setGridNeedsLayout();
#endif
setNeedsStyleRecalc(NoStyleChange);
+=======
+ clearNeedsStyleRecalc();
+>>>>>>> webkit.org at r64523
}
HTMLElement::recalcStyle(ch);
}
diff --git a/WebCore/html/HTMLInputElement.idl b/WebCore/html/HTMLInputElement.idl
index c66e775..c726caa 100644
--- a/WebCore/html/HTMLInputElement.idl
+++ b/WebCore/html/HTMLInputElement.idl
@@ -100,7 +100,7 @@ module html {
readonly attribute NodeList labels;
#if defined(ENABLE_INPUT_SPEECH) && ENABLE_INPUT_SPEECH
- attribute [Reflect] boolean speech;
+ attribute [Reflect, EnabledAtRuntime] boolean speech;
#endif
};
diff --git a/WebCore/html/HTMLStyleElement.cpp b/WebCore/html/HTMLStyleElement.cpp
index 4fa08ad..1066c75 100644
--- a/WebCore/html/HTMLStyleElement.cpp
+++ b/WebCore/html/HTMLStyleElement.cpp
@@ -36,13 +36,9 @@ using namespace HTMLNames;
inline HTMLStyleElement::HTMLStyleElement(const QualifiedName& tagName, Document* document, bool createdByParser)
: HTMLElement(tagName, document)
- , m_loading(false)
- , m_createdByParser(createdByParser)
- , m_startLineNumber(0)
+ , StyleElement(document, createdByParser)
{
ASSERT(hasTagName(styleTag));
- if (createdByParser && document && document->scriptableDocumentParser())
- m_startLineNumber = document->scriptableDocumentParser()->lineNumber();
}
PassRefPtr<HTMLStyleElement> HTMLStyleElement::create(const QualifiedName& tagName, Document* document, bool createdByParser)
@@ -62,32 +58,25 @@ void HTMLStyleElement::parseMappedAttribute(Attribute* attr)
void HTMLStyleElement::finishParsingChildren()
{
- StyleElement::process(this, m_startLineNumber);
- StyleElement::sheet(this);
- m_createdByParser = false;
+ StyleElement::finishParsingChildren(this);
HTMLElement::finishParsingChildren();
}
void HTMLStyleElement::insertedIntoDocument()
{
HTMLElement::insertedIntoDocument();
-
- document()->addStyleSheetCandidateNode(this, m_createdByParser);
- if (!m_createdByParser)
- StyleElement::insertedIntoDocument(document(), this);
+ StyleElement::insertedIntoDocument(document(), this);
}
void HTMLStyleElement::removedFromDocument()
{
HTMLElement::removedFromDocument();
- document()->removeStyleSheetCandidateNode(this);
- StyleElement::removedFromDocument(document());
+ StyleElement::removedFromDocument(document(), this);
}
void HTMLStyleElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
{
- if (!changedByParser)
- StyleElement::process(this, 0);
+ StyleElement::childrenChanged(this);
HTMLElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
}
@@ -96,24 +85,6 @@ StyleSheet* HTMLStyleElement::sheet()
return StyleElement::sheet(this);
}
-bool HTMLStyleElement::isLoading() const
-{
- if (m_loading)
- return true;
- if (!m_sheet)
- return false;
- return static_cast<CSSStyleSheet *>(m_sheet.get())->isLoading();
-}
-
-bool HTMLStyleElement::sheetLoaded()
-{
- if (!isLoading()) {
- document()->removePendingSheet();
- return true;
- }
- return false;
-}
-
const AtomicString& HTMLStyleElement::media() const
{
return getAttribute(mediaAttr);
diff --git a/WebCore/html/HTMLStyleElement.h b/WebCore/html/HTMLStyleElement.h
index 10f5b10..07b5bd9 100644
--- a/WebCore/html/HTMLStyleElement.h
+++ b/WebCore/html/HTMLStyleElement.h
@@ -53,19 +53,13 @@ private:
virtual void finishParsingChildren();
- virtual bool isLoading() const;
- virtual bool sheetLoaded();
-
- virtual void setLoading(bool loading) { m_loading = loading; }
+ virtual bool isLoading() const { return StyleElement::isLoading(); }
+ virtual bool sheetLoaded() { return StyleElement::sheetLoaded(document()); }
virtual void addSubresourceAttributeURLs(ListHashSet<KURL>&) const;
virtual const AtomicString& media() const;
virtual const AtomicString& type() const;
-
- bool m_loading;
- bool m_createdByParser;
- int m_startLineNumber;
};
} //namespace
diff --git a/WebCore/html/canvas/CanvasRenderingContext.h b/WebCore/html/canvas/CanvasRenderingContext.h
index f752377..2ee1693 100644
--- a/WebCore/html/canvas/CanvasRenderingContext.h
+++ b/WebCore/html/canvas/CanvasRenderingContext.h
@@ -46,6 +46,7 @@ namespace WebCore {
virtual bool is2d() const { return false; }
virtual bool is3d() const { return false; }
+ virtual bool isAccelerated() const { return false; }
private:
HTMLCanvasElement* m_canvas;
diff --git a/WebCore/html/canvas/CanvasRenderingContext2D.cpp b/WebCore/html/canvas/CanvasRenderingContext2D.cpp
index 6c3d372..3b05348 100644
--- a/WebCore/html/canvas/CanvasRenderingContext2D.cpp
+++ b/WebCore/html/canvas/CanvasRenderingContext2D.cpp
@@ -164,6 +164,23 @@ void CanvasRenderingContext2D::restore()
c->restore();
}
+void CanvasRenderingContext2D::setAllAttributesToDefault()
+{
+ state().m_globalAlpha = 1;
+ state().m_shadowOffset = FloatSize();
+ state().m_shadowBlur = 0;
+ state().m_shadowColor = Color::transparent;
+ state().m_globalComposite = CompositeSourceOver;
+
+ GraphicsContext* context = drawingContext();
+ if (!context)
+ return;
+
+ context->setShadow(FloatSize(), 0, Color::transparent, DeviceColorSpace);
+ context->setAlpha(1);
+ context->setCompositeOperation(CompositeSourceOver);
+}
+
CanvasStyle* CanvasRenderingContext2D::strokeStyle() const
{
return state().m_strokeStyle.get();
@@ -790,14 +807,18 @@ void CanvasRenderingContext2D::clearRect(float x, float y, float width, float he
{
if (!validateRectForCanvas(x, y, width, height))
return;
- GraphicsContext* c = drawingContext();
- if (!c)
+ GraphicsContext* context = drawingContext();
+ if (!context)
return;
if (!state().m_invertibleCTM)
return;
FloatRect rect(x, y, width, height);
+
+ save();
+ setAllAttributesToDefault();
willDraw(rect);
- c->clearRect(rect);
+ context->clearRect(rect);
+ restore();
}
void CanvasRenderingContext2D::fillRect(float x, float y, float width, float height)
diff --git a/WebCore/html/canvas/CanvasRenderingContext2D.h b/WebCore/html/canvas/CanvasRenderingContext2D.h
index fb5f27a..22ed7fc 100644
--- a/WebCore/html/canvas/CanvasRenderingContext2D.h
+++ b/WebCore/html/canvas/CanvasRenderingContext2D.h
@@ -104,6 +104,7 @@ public:
void save();
void restore();
+ void setAllAttributesToDefault();
void scale(float sx, float sy);
void rotate(float angleInRadians);
diff --git a/WebCore/html/canvas/WebGLRenderingContext.h b/WebCore/html/canvas/WebGLRenderingContext.h
index fa9ffdb..017570b 100644
--- a/WebCore/html/canvas/WebGLRenderingContext.h
+++ b/WebCore/html/canvas/WebGLRenderingContext.h
@@ -58,6 +58,7 @@ class WebKitCSSMatrix;
virtual ~WebGLRenderingContext();
virtual bool is3d() const { return true; }
+ virtual bool isAccelerated() const { return true; }
// Helper to return the size in bytes of OpenGL data types
// like GL_FLOAT, GL_INT, etc.