This moves ownership of the compositor's video layer over to the
implementation of WebMediaPlayer, as well as all interaction
between the media player system and the compositor layer or its
interfaces such as cc::VideoFrameProvider.

Now, the WebMediaPlayer implementation calls setWebLayer() to
provide the WebLayer* to the WebMediaPlayerClientImpl so that
it can be inserted into the GraphicsLayer tree appropriately.

Defines REMOVE_WEBVIDEOFRAME in related headers to enable this code
path in chromium.

Once chromium removes its use of WebVideoFrame and its related
classes, we can remove them from WebKit entirely.

This moves ownership of the compositor's video layer over to the
implementation of WebMediaPlayer, as well as all interaction
between the media player system and the compositor layer or its
interfaces such as cc::VideoFrameProvider.

Now, the WebMediaPlayer implementation calls setWebLayer() to
provide the WebLayer* to the WebMediaPlayerClientImpl so that
it can be inserted into the GraphicsLayer tree appropriately.

Defines REMOVE_WEBVIDEOFRAME in related headers to enable this code
path in chromium.

Once chromium removes its use of WebVideoFrame and its related
classes, we can remove them from WebKit entirely.

Hook FormAssociatedElement, HTMLFormElement to notify EditorClient of form changes after a page has loaded.
Will be used to add autofill support for ajax-y webpages. e.g if while filling out a form, new fields
are dynamically created, autofill can know to re-query the autofill server and keep going.
https://bugs.webkit.org/show_bug.cgi?id=110375

Marked some 2d canvas tests as failing. These tests are using the
two point radial gradient API. The bug was already present in
chromium. Starts getting detected in DRT with this change.
Related: crbug.com/222140

New top-level enum (not tied to WebFileSystem class) will allow
easier refactoring of filesystem methods within the Platform/
directory. (All changes are behind an #ifdef so we can sync
required changes in embedders.)

The defaultVideoPosterURL setting has been added in
https://bugs.webkit.org/show_bug.cgi?id=110263,
this added methods to access it in Chromium.
The settings will be used by Android WebView API
WebChromeClient.getDefaultVideoPoster()

Covered by
editing/selection/doubleclick-inline-first-last-contenteditable.html.

* page/Settings.cpp:
(WebCore): Configure default value for smartInsertDeleteEnabled and
selectTrailingWhitespaceEnabled seetings as they are different in
Chromium port depending on the OS.
* page/Settings.in: Add new setting.

Source/WebKit/blackberry:

Use new settings for smartInsertDeleteEnabled and
selectTrailingWhitespaceEnabled.

Use new Page settings for smartInsertDeleteEnabled and
selectTrailingWhitespaceEnabled and update API accordingly.

WebSettings API is required by DRT in order to set the proper default
values which are different from browser defaults.

* public/WebSettings.h: Add new API to manage smartInsertDeleteEnabled
and selectTrailingWhitespaceEnabled settings.
* public/WebViewClient.h: Remove API related to smartInsertDeleteEnabled
and selectTrailingWhitespaceEnabled as they will be managed from page
settings from now on.
* src/EditorClientImpl.cpp:
(WebKit::EditorClientImpl::smartInsertDeleteEnabled):
(WebKit::EditorClientImpl::isSelectTrailingWhitespaceEnabled): Use new
settings for smartInsertDeleteEnabled and
selectTrailingWhitespaceEnabled.
* src/WebSettingsImpl.cpp: Implement methods establishing the page
settings.
(WebKit::WebSettingsImpl::setSelectTrailingWhitespaceEnabled):
(WebKit):
(WebKit::WebSettingsImpl::setSmartInsertDeleteEnabled):
* src/WebSettingsImpl.h:
(WebSettingsImpl): Implement new API to manage the new settings.

Source/WebKit/efl:

Use new settings for smartInsertDeleteEnabled and
selectTrailingWhitespaceEnabled.

In texImage2D() for HTMLVideoElement in WebGL, it is possible to do a GPU-GPU texture copy instead of CPU readback
and upload when videoFrame is in the form of textures. Each platform port needs to implement the interface
copyVideoTextureToPlatformTexture() defined in MediaPlayer.h to make it work.

Patch by James Robinson <jamesr@chromium.org> on 2013-03-08
Reviewed by Adrienne Walker.

Source/Platform:

Neither of these are used any more. All callbacks from the compositor are handled by
the embedder and plumbed (where appropriate) through the WebWidget/WebView APIs. All
settings are handled by the embedder.

Currently, the PPAPI creates a WebScopedUserGesture up to 10 seconds
after a call with an currently active user gesture was made. It should
use the newly added WebUserGestureToken to make sure this user gesture
is not consumed multiple times.

We can't require a WebUserGestureToken for a WebScopedUserGesture, since
e.g. the extension API needs to be able to create a WebScopedUserGesture
out of the blue.

Source/WebCore: Modify log method in V8DOMActivityLogger so that the apiName and
extraInfo arguments are of type const String& instead of const char*.
This change gets rid of some of the memory ownership issues that arise
with char* pointers.
https://bugs.webkit.org/show_bug.cgi?id=111483

Source/WebKit/chromium: Modify log method in WebDOMActivityLogger so that the apiName and
extraInfo arguments are of type const WebString& instead of const char*.
This change gets rid of some of the memory ownership issues that arise
with char* pointers.
https://bugs.webkit.org/show_bug.cgi?id=111483

Added iconTypes parameter to Document::iconURLs().
Added Document::shortcutIconURLs() with original semantics of iconURLs().
Fixed IconController.cpp to provide iconTypesMask to iconURLs().
Renamed iconTypes to iconTypesMask to make the meaning clearer.

We'd like to ensure that early adopters don't get stuck on a prefixed
header; when CSP 1.1 is baked enough to be supported in multiple
browsers, everything should Just Work™.

This patch changes WebKit's behavior regarding CSP_NEXT features.
Currently, they're only exposed on the prefixed header ('X-WebKit-CSP').
This patch exposes those features on the canonical header, assuming
that the runtime flag is set. This shouldn't have any effect at all on
ports that haven't yet enabled CSP_NEXT, and will simply clear the way
for a clean deployment to a wider audience once the specification
process is further along.

This change shouldn't have any effect on the existing tests: they
should run just as they did before. The next step will be to adjust
the LayoutTests for 1.1 to prefer the canonical header, but I'll do
that in another patch to reduce churn.

Related, the enum names no longer made sense: the difference between the
canonical 'Content-Security-Policy' header and 'X-WebKit-CSP' is the
prefix, not the functionality. This patch renames them for clarity.

* dom/Document.cpp:
(WebCore::Document::processHttpEquiv):
* loader/FrameLoader.cpp:
(WebCore::FrameLoader::didBeginDocument):
Use the new enum names.
* page/ContentSecurityPolicy.cpp:
(CSPDirectiveList):
(WebCore::CSPDirectiveList::CSPDirectiveList):
(WebCore::CSPDirectiveList::addDirective):
Drop the 'm_experimental' property from CSPDirectiveList; we'll
control the behavior via the runtime flag from now on.

Also, this fixes a small bug in 'addDirective()': we never threw
unrecognized directive errors for users who were sending the
prefixed header. Oops!
(WebCore::ContentSecurityPolicy::deprecatedHeaderType):
Use the new enum names.
* page/ContentSecurityPolicy.h:
Redefine the enum for clarity: 'PrefixedReport' and 'Report'
rather than 'ReportAllDirectives' and 'ReportStableDirectives'.

Source/WebKit/chromium:

The enum names no longer made sense: the difference between the
canonical 'Content-Security-Policy' header and 'X-WebKit-CSP' is the
prefix, not the functionality. This patch renames them for clarity.

* public/WebContentSecurityPolicy.h:
* src/AssertMatchingEnums.cpp:
Rename the Chromium side of the enums.

Added iconTypes parameter to Document::iconURLs().
Added Document::shortcutIconURLs() with original semantics of iconURLs().
Fixed IconController.cpp to provide iconTypesMask to iconURLs().
Renamed iconTypes to iconTypesMask to make the meaning clearer.

Adds additional static methods to DOMWrapperWorld for managing the
mapping between worldIDs and logger objects (where DOM logging messages
are sent), and also defines a class (V8DOMActivityLogger) for logger
objects.

This patch adds initial plumbing for enabling logging of DOM
activity by JavaScript code running withing v8, on a
per-world basis. In particular it adds methods to the chromium
WebKit API for associating a logger object with world ids for which
DOM activity logging is enabled.

In the case of Windows 8, text input state including on-screen keyboard is controlled by the
value of WebTextInputType returned from WebViewImpl::textInputType().
In past, it returned WebTextInputTypeDate for date text input but now it returns
WebTextInputTypeNone.
WebTextInputTypeNone is used for non editable node, so on-screen keyboard will be hidden if
the date text input is focused. So there is no way to input on Windows 8 tablet without
physical keyboard except tapping small up/down arrow.

* public/WebTextInputType.h: Introduces WebTextInputTypeDateTimeField.
* src/WebViewImpl.cpp:
(WebKit::WebViewImpl::textInputInfo): Fills type filed regardless of editable or not. It is
safe because textInputType returns editable type only for known editable element.
(WebKit::WebViewImpl::textInputType): Returns WebTextInputTypeDateTimeField for the date
time field element.

This improves Speed Index by ~5%, because it encourages us to load images that are needed for
painting over speculative preloads. Ideally, all embedders would use this, but it relies on
ResourceHandle::didChangePriority being implemented. Currently, only Chrome does that.

In the case of Windows 8, text input state including on-screen keyboard is controlled by the
value of WebTextInputType returned from WebViewImpl::textInputType().
In past, it returned WebTextInputTypeDate for date text input but now it returns
WebTextInputTypeNone.
WebTextInputTypeNone is used for non editable node, so on-screen keyboard will be hidden if
the date text input is focused. So there is no way to input on Windows 8 tablet without
physical keyboard except tapping small up/down arrow.

* public/WebTextInputType.h: Introduces WebTextInputTypeDateTimeField.
* src/WebViewImpl.cpp:
(WebKit::WebViewImpl::textInputInfo): Fills type filed regardless of editable or not. It is
safe because textInputType returns editable type only for known editable element.
(WebKit::WebViewImpl::textInputType): Returns WebTextInputTypeDateTimeField for the date
time field element.

Add a method expandedToParagraph() to WebRange to return a copy of the
range expanded to paragraph boundaries. This method is to be used to
query the spelling context around the misspelled word under cursor.

Patch by James Robinson <jamesr@chromium.org> on 2013-02-25
Reviewed by Adrienne Walker.

This plumbs the WebViewImpl::m_suppressInvalidations logic out to the WebWidgetClient so
it can be implemented by the embedder. The existing logic is left in place for now,
once the embedder side has landed WebViewImpl will be purely a pass-through.

This change implements a prefixed version of document.register(), with minimal feature support.
- The feature is guarded by ENABLE(CUSTOM_ELEMENTS) and RuntimeEnabledFeatures::customDOMElementsEnabled().
- This bare-bone version only recognizes "name" and "prototype" parameters. It doesn't support default value of "prototype" parameter.
- Currently only V8 is supported. JSC binding needs its own binding implementation.

= Major new classes under dom/:

The dom module gets two new classes:
- CustomElementConstructor: A return value of document.register()
which holds the custom element definition.
- CustomElementRegistry: A collection of CustomElementConstructor objects.
CustomElementRegistry instance is created per Document and is owned by the Document.

CustomElementConstructor knows the definition of each custom
element, which is registered by document.register(). The name and
other options are held by this object. CustomElementRegistry owns a set
of the registered constructors. The registry guarantees invariants
like validity and uniqueness of the element names.

= A change on make_names.pl

This change tweaks make_names.pl (or generated HTMLElementFactory)
to hook the creations of unknown elements. Some of element names
which come to the fallback path can be one of registered custom
element.

= [V8WrapAsFunction] extended attribute:

The document.register() API returns a constructor
function. However, the V8 binding currently doesn't support it. To
make it possible, this change introduces "V8WrapAsFunction"
extended attribute for annotating CustomElementConstructor IDL
interface.

V8WrapAsFunction wraps the annotated interface with a JavaScript
function, which calls the original object as a function, or as a
constructor depends on the context.

With this wrapper function, there are two levels of indirection
between native C++ object and author-visible JS function:

The code generator generates the binding code which deals with
this indirection. Also, there is a set of helper functions in
V8AdaptorFunction.h/cpp which takes care of this indirection.
V8DOMWrapper.cpp/h works as a facade for these APIs and is used from
the generated code.

This redundancy comes from limitations of both V8 bindings and V8
embedding API. See bug 108138 for details.

= V8HTMLCustomElement

Unlike built-in HTML elements, any custom element has no
corresponding C++ class. Instead, document.register() should allow
passing a prototype object for the elements being registered.

V8HTMLCustomElement handles this lack of native class. It behaves
like a native side proxy of non-native HTMLElement subclasses. It
connects each custom element to an appropriate native element,
which is HTMLElement at this time. This restriction will be
relaxed later. See Bug 110436 for details.

= Custom DOM elements and multiple worlds

In this patch, custom element registration and instantiation is not allowed
in non-main world and document.register() API just fails there.

Factor MediaSource methods out of MediaPlayer & MediaPlayerPrivate and into a new MediaSourcePrivate interface.
https://bugs.webkit.org/show_bug.cgi?id=109857

Reviewed by Adam Barth.

Source/WebCore:

This is a simple refactor that moves MediaSource related methods out of MediaPlayer & MediaPlayerPrivate
so that the MediaSource implementation can be updated without further polluting these interfaces.
MediaSourcePrivate is the new WebCore interface that ports must implement to support the MediaSource API.

WebMediaSource and WebMediaSource client were created to replace the MediaSource methods in WebMediaPlayer and
WebMediaPlayerClient. This allows the MediaSource implementation to be updated without further polluting the
media player interfaces.

Added runtime flag for Canvas Path. Enabled it by default for TestShell. Otherwise
the constructor for Path on DOMWindow would never be activatable, since the script
is running after creating the DOMWindow object.

Now that https://codereview.chromium.org/12230054 has landed, the
idbFactory method is no longer needed. (Embedders must now call
the new setIDBFactory method upon initialization.) Part of a
larger refactoring series; see tracking bug 82948.

Now that https://codereview.chromium.org/12230054 has landed, the
idbFactory method is no longer needed. (Embedders must now call
the new setIDBFactory method upon initialization.) Part of a
larger refactoring series; see tracking bug 82948.

[Chromium] Add a setting to control scaling content to fit viewport
https://bugs.webkit.org/show_bug.cgi?id=109584

Adds a setting called 'initializeAtMinimumPageScale'. By default,
it is set to 'true' which corresponds to Chrome on Android behavior--
adjust the page scale to make the content fit into the viewport
by width. When set to false, the setting instructs ChromeClientImpl to
set page scale to 1.0, unless the scale value is set by the page
in the viewport meta-tag.

[chromium] Add acceleration ratios for the deltas to WebMouseWheelEvents.
https://bugs.webkit.org/show_bug.cgi?id=109611

The deltas in mousewheel events generated by track can be accelerated (e.g. when
scrolling repeatedly). Keep track of the ratio of the acceleration since that is
useful for some tasks (e.g. overflow navigation gesture).

Rename RenderLayer::scrollByRecursively() to RenderLayer::scrollBy() and add a parameter
of type RenderLayer::ScrollPropagation to specify whether or not the scroll should
propagate to its parent by recursing. Implement RenderLayer::scrollByRecursively() as a
call to RenderLayer::scrollBy() with argument RenderLayer::ShouldPropagateScroll so
that all existing calls to the function still produce the correct behavior.

In EventHandler::handleGestureScrollUpdate(), call RenderLayer::scrollBy() with
argument RenderLayer::ShouldPropagateScroll if |gestureEvent| is a GestureScrollUpdate
or instead with argument RenderLayer::DontPropagateScroll if |gestureEvent| is a
GestureScrollUpdateWithoutPropagation.

Rename RenderLayer::scrollByRecursively() to RenderLayer::scrollBy() and add a parameter
of type RenderLayer::ScrollPropagation to specify whether or not the scroll should
propagate to its parent by recursing. Implement RenderLayer::scrollByRecursively() as a
call to RenderLayer::scrollBy() with argument RenderLayer::ShouldPropagateScroll so
that all existing calls to the function still produce the correct behavior.

In EventHandler::handleGestureScrollUpdate(), call RenderLayer::scrollBy() with
argument RenderLayer::ShouldPropagateScroll if |gestureEvent| is a GestureScrollUpdate
or instead with argument RenderLayer::DontPropagateScroll if |gestureEvent| is a
GestureScrollUpdateWithoutPropagation.

WebWidget::selectionBounds() returns the anchor and focus of the
selection. This matches the arguments to WebFrame::selectRange().
Add WebWidget::isSelectionAnchorFirst so that a caller can convert the
anchor/focus to start/end.

Now that https://codereview.chromium.org/12181010/ has landed, the
idbFactory method is no longer needed. (Embedders must now call
the new setIDBFactory method upon initialization.) Part of a
larger refactoring series; see tracking bug 82948.