⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Timeline



Oct 14, 2012:

11:21 PM Changeset in webkit [131290] by loislo@chromium.org
  • 6 edits in trunk/Source/WebCore

Web Inspector: NMI remove hand made object builders with automatic builder.
https://bugs.webkit.org/show_bug.cgi?id=99186

Reviewed by Yury Semikhatsky.

Old builders were replaced with single automatic builder.
It does the next things:
a) deduplicates entries in the MemoryInstrumentationClient's map and converts objectType pointers to String;
b) creates parent entries and assigns their aggregated sizes;
c) creates the hierarchy of MemoryBlocks recursively.

  • dom/WebCoreMemoryInstrumentation.cpp:

(WebCore):

  • dom/WebCoreMemoryInstrumentation.h:

(WebCoreMemoryTypes):

  • inspector/InspectorMemoryAgent.cpp:

(WebCore):
(WebCore::jsHeapInfo):
(WebCore::renderTreeInfo):
(WebCore::addPlatformComponentsInfo):
(WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):

  • inspector/MemoryInstrumentationImpl.cpp:

(WebCore::MemoryInstrumentationClientImpl::sizesMap):
(WebCore):

  • inspector/MemoryInstrumentationImpl.h:

(WebCore):
(MemoryInstrumentationClientImpl):

8:17 PM Changeset in webkit [131289] by fpizlo@apple.com
  • 10 edits in trunk/Source/JavaScriptCore

DFG should handle polymorphic array modes by eagerly transforming arrays into the most general applicable form
https://bugs.webkit.org/show_bug.cgi?id=99269

Reviewed by Geoffrey Garen.

This kills off a bunch of code for "polymorphic" array modes in the DFG. It should
also be a performance win for code that uses a lot of array storage arrays.

  • dfg/DFGAbstractState.cpp:

(JSC::DFG::AbstractState::execute):

  • dfg/DFGArrayMode.cpp:

(JSC::DFG::fromObserved):
(JSC::DFG::modeAlreadyChecked):
(JSC::DFG::modeToString):

  • dfg/DFGArrayMode.h:

(DFG):
(JSC::DFG::modeUsesButterfly):
(JSC::DFG::modeIsJSArray):
(JSC::DFG::mayStoreToTail):
(JSC::DFG::mayStoreToHole):
(JSC::DFG::canCSEStorage):
(JSC::DFG::modeSupportsLength):
(JSC::DFG::benefitsFromStructureCheck):

  • dfg/DFGFixupPhase.cpp:

(JSC::DFG::FixupPhase::checkArray):
(JSC::DFG::FixupPhase::blessArrayOperation):

  • dfg/DFGGraph.h:

(JSC::DFG::Graph::byValIsPure):

  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode):
(JSC::DFG::SpeculativeJIT::checkArray):
(JSC::DFG::SpeculativeJIT::arrayify):
(DFG):
(JSC::DFG::SpeculativeJIT::compileGetArrayLength):

  • dfg/DFGSpeculativeJIT.h:

(JSC::DFG::SpeculativeJIT::putByValWillNeedExtraRegister):
(SpeculativeJIT):

  • dfg/DFGSpeculativeJIT32_64.cpp:

(JSC::DFG::SpeculativeJIT::compile):

  • dfg/DFGSpeculativeJIT64.cpp:

(JSC::DFG::SpeculativeJIT::compile):

7:40 PM Changeset in webkit [131288] by andersca@apple.com
  • 2 edits in trunk/Source/WebKit2

Fix the world.

Add back a forgotten !.

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::postInjectedBundleMessage):

7:33 PM Changeset in webkit [131287] by fpizlo@apple.com
  • 2 edits in trunk/Source/JavaScriptCore

REGRESSION(126886): Fat binary builds don't know how to handle architecture variants to which the LLInt is agnostic
https://bugs.webkit.org/show_bug.cgi?id=99270

Reviewed by Geoffrey Garen.

The fix is to hash cons the offsets based on configuration index, not the offsets
themselves.

  • offlineasm/offsets.rb:
7:01 PM Changeset in webkit [131286] by shinyak@chromium.org
  • 2 edits in trunk/LayoutTests

[Chromium] Unreviewed gardening, TestExpectations updated.

  • platform/chromium/TestExpectations:
6:52 PM Changeset in webkit [131285] by weinig@apple.com
  • 3 edits in trunk/Source/WebKit2

Stop all the crashing!

The WebProcessProxy is not the Connection::Client, the WebConnectionToWebProcess is.

  • UIProcess/WebConnectionToWebProcess.h:

(WebKit::WebConnectionToWebProcess::webProcessProxy):

  • UIProcess/WebProcessProxy.cpp:

(WebKit::WebProcessProxy::fromConnection):

6:21 PM Changeset in webkit [131284] by tkent@chromium.org
  • 8 edits in branches/chromium/1271

Merge 130848 - Sub-fields in input[type=time] should not be focusable if the input is disabled or read-only
https://bugs.webkit.org/show_bug.cgi?id=98850

Reviewed by Kentaro Hara.

Source/WebCore:

Covered by additional test cases of
time-multiple-fields/time-multiple-fields-keyboard-events.html and
time-multiple-fields/time-multiple-fields-mouse-events.html.

  • html/shadow/DateTimeFieldElement.h:

(FieldOwner): Add isFieldOwnerDisabledOrReadOnly.

  • html/shadow/DateTimeFieldElement.cpp:

(WebCore::DateTimeFieldElement::isFocusable):
Check isFieldOwnerDisabledOrReadOnly, and calls HTMLElement::isFocusable()
just in case.

  • html/shadow/DateTimeEditElement.cpp:

(WebCore::DateTimeEditElement::isFieldOwnerDisabledOrReadOnly): Added.

  • html/shadow/DateTimeEditElement.h:

(DateTimeEditElement): Declare isFieldOwnerDisabledOrReadOnly.

LayoutTests:

  • fast/forms/time-multiple-fields/time-multiple-fields-keyboard-events-expected.txt:
  • fast/forms/time-multiple-fields/time-multiple-fields-keyboard-events.html:
  • fast/forms/time-multiple-fields/time-multiple-fields-mouse-events-expected.txt:
  • fast/forms/time-multiple-fields/time-multiple-fields-mouse-events.html:

TBR=tkent@chromium.org
Review URL: https://codereview.chromium.org/11150011

5:28 PM Changeset in webkit [131283] by weinig@apple.com
  • 8 edits in trunk/Source/WebKit2

Re-land of "WebContext should be a MessageReceiver"
https://bugs.webkit.org/show_bug.cgi?id=98958

Patch by Anders Carlsson <andersca@apple.com> on 2012-10-14
Reviewed by Sam Weinig.

Make WebContext be a MessageReceiver that lives in its own map. This allows us to get rid of the
knowsHowToHandleMessage functions on MessageReceiverMap and WebContext.

  • Platform/CoreIPC/Connection.h:

(CoreIPC::Connection::client):
(Connection):

  • Platform/CoreIPC/MessageReceiverMap.cpp:

(CoreIPC::MessageReceiverMap::addMessageReceiver):
(CoreIPC::MessageReceiverMap::invalidate):
(CoreIPC::MessageReceiverMap::knowsHowToHandleMessage):
(CoreIPC::MessageReceiverMap::dispatchMessage):
(CoreIPC::MessageReceiverMap::dispatchSyncMessage):

  • Platform/CoreIPC/MessageReceiverMap.h:

(MessageReceiverMap):

  • UIProcess/WebContext.cpp:

(WebKit::WebContext::WebContext):
(WebKit::WebContext::~WebContext):
(WebKit::WebContext::dispatchMessage):
(WebKit::WebContext::dispatchSyncMessage):
(WebKit::WebContext::didReceiveMessage):
(WebKit::WebContext::didReceiveSyncMessage):

  • UIProcess/WebContext.h:

(WebContext):

  • UIProcess/WebProcessProxy.cpp:

(WebKit::WebProcessProxy::fromConnection):
(WebKit):
(WebKit::WebProcessProxy::didReceiveMessage):
(WebKit::WebProcessProxy::didReceiveSyncMessage):

  • UIProcess/WebProcessProxy.h:

(WebProcessProxy):

5:24 PM Changeset in webkit [131282] by andersca@apple.com
  • 5 edits in trunk/Source/WebKit2

WebPage::PostInjectedBundleMessage should be a variadic message
https://bugs.webkit.org/show_bug.cgi?id=99277

Reviewed by Sam Weinig.

Don't use a data reference for messages posted to the injected bundle; they could contain data that requires attachments
(such as shared memory).

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::postMessageToInjectedBundle):

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::postInjectedBundleMessage):

  • WebProcess/WebPage/WebPage.h:

(WebPage):

  • WebProcess/WebPage/WebPage.messages.in:
4:55 PM Changeset in webkit [131281] by weinig@apple.com
  • 23 edits
    2 deletes in trunk/Source

Simplify user content in WebKit2 by using WebCore::UserStyleSheet and WebCore::UserScript directly
https://bugs.webkit.org/show_bug.cgi?id=99276

Reviewed by Anders Carlsson.

Source/WebCore:

Add default constructors for UserScript and UserStyleSheet so they can be used in CoreIPC encoding/decoding.

  • page/UserScript.h:

(WebCore::UserScript::UserScript):
(UserScript):

  • page/UserStyleSheet.h:

(WebCore::UserStyleSheet::UserStyleSheet):
(UserStyleSheet):

Source/WebKit2:

  • Removes UserContentContainer in favor of Vector<UserStyleSheet> and Vector<UserScript> right on WebPageGroupData.
  • Adds support for UserScripts, but does not expose API for it just yet.
  • CMakeLists.txt:
  • GNUmakefile.list.am:
  • Target.pri:
  • WebKit2.xcodeproj/project.pbxproj:
  • win/WebKit2.vcproj:
  • Shared/UserContentContainer.cpp: Removed.
  • Shared/UserContentContainer.h: Removed.

Remove UserContentContainer.h/cpp.

  • Shared/API/c/WKBase.h:
  • Shared/API/c/WKSharedAPICast.h:

(WebKit::toUserScriptInjectionTime):
(WebKit::toUserContentInjectedFrames):

  • WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
  • WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:

Move UserContent enums to WKBase.h so they can be used from both processes, and move the
casts to WKSharedAPICast.

  • Shared/WebCoreArgumentCoders.cpp:
  • Shared/WebCoreArgumentCoders.h:

Add coders for UserStyleSheet and UserScript.

  • Shared/WebPageGroupData.cpp:

(WebKit::WebPageGroupData::encode):
(WebKit::WebPageGroupData::decode):

  • Shared/WebPageGroupData.h:

(WebPageGroupData):
Replace UserContentContainer with Vector<UserStyleSheet> and Vector<UserScript>. Stop using
CoreIPC::In() and CoreIPC::Out(), and instead just call encode/decode multiple times.

  • UIProcess/API/C/WKPageGroup.cpp:

(WKPageGroupAddUserStyleSheet):
Pass the parameters with as little conversion as possible to the C++ to avoid doing too much
work in the API layer.

  • UIProcess/WebPageGroup.cpp:

(WebKit::toStringVector):
(WebKit::WebPageGroup::addUserStyleSheet):
(WebKit::WebPageGroup::addUserScript):
(WebKit::WebPageGroup::removeAllUserStyleSheets):
(WebKit::WebPageGroup::removeAllUserScripts):
(WebKit::WebPageGroup::removeAllUserContent):

  • UIProcess/WebPageGroup.h:
  • WebProcess/WebPage/WebPageGroupProxy.cpp:

(WebKit::WebPageGroupProxy::WebPageGroupProxy):
(WebKit::WebPageGroupProxy::addUserStyleSheet):
(WebKit::WebPageGroupProxy::addUserScript):
(WebKit::WebPageGroupProxy::removeAllUserScripts):
(WebKit::WebPageGroupProxy::removeAllUserContent):

  • WebProcess/WebPage/WebPageGroupProxy.h:

(WebPageGroupProxy):

  • WebProcess/WebPage/WebPageGroupProxy.messages.in:

Add support for user scripts and update to use UserScript and UserStyleSheet directly.

4:50 PM Changeset in webkit [131280] by jonlee@apple.com
  • 15 edits
    2 adds in trunk

Allow notification origin permission request when no js callback is provided
https://bugs.webkit.org/show_bug.cgi?id=63615
<rdar://problem/11059590>

Reviewed by Sam Weinig.

Source/WebCore:

Instead of throwing a type error when no callback is provided, we pass a null callback.

Test: http/tests/notifications/legacy/request-no-callback.html

  • bindings/js/JSDesktopNotificationsCustom.cpp:

(WebCore::JSNotificationCenter::requestPermission):

Source/WebKit/mac:

Introduce a boolean to determine whether the request was using the legacy or standard API. This way,
we do not fall through to calling the standard API's callback if the legacy API's callback is null.

  • WebCoreSupport/WebNotificationClient.mm:

(WebCore):
(-[WebNotificationPolicyListener initWithVoidCallback:]):
(-[WebNotificationPolicyListener allow]):
(-[WebNotificationPolicyListener deny]):

Source/WebKit2:

Null checks already exist for both standard and legacy API callbacks, so no changes are needed here
like there are in WebKit 1. The checks existed because the callbacks are held in a hash map used to keep
track of pending requests.

Also, add a check for a null callback when short circuiting.

  • WebProcess/Notifications/NotificationPermissionRequestManager.cpp:

(WebKit::NotificationPermissionRequestManager::startRequest):

Tools:

Teach DRT to look at the existing entries in the permission hash map when permission is requested.

  • DumpRenderTree/mac/MockWebNotificationProvider.h: Expose policyForOrigin.
  • DumpRenderTree/mac/MockWebNotificationProvider.mm:

(-[MockWebNotificationProvider setWebNotificationOrigin:permission:]):

  • DumpRenderTree/mac/UIDelegate.mm:

(-[UIDelegate webView:decidePolicyForNotificationRequestFromOrigin:listener:]): Look at whether a
policy for the origin already exists. If so, accept or deny the request as appropriate. Otherwise,
accept by default.

LayoutTests:

  • http/tests/notifications/legacy/request-expected.txt:
  • http/tests/notifications/legacy/request-no-callback-expected.txt: Added.
  • http/tests/notifications/legacy/request-no-callback.html: Calls webkitNotifications.requestPermission()

with no callback, with default and denied permission. For WebKit2, if the permission is not default, it
will short circuit instead of creating a pending request.

  • http/tests/notifications/legacy/request.html: The test mistakenly uses the standard API instead of

the legacy API. The results don't change, but we make sure that we call
webkitNotifications.requestPermission() with a callback to test full coverage of the legacy API. We also
expand the test to cover both default and denied permissions.

  • http/tests/notifications/request-expected.txt:
  • http/tests/notifications/request.html: Expand test to cover both default and denied permissions.
4:39 PM Changeset in webkit [131279] by andersca@apple.com
  • 10 edits in trunk/Source

Move QDataStream functions into HistoryItemQt.cpp
https://bugs.webkit.org/show_bug.cgi?id=99203

Reviewed by Andreas Kling.

Source/WebCore:

It seems like the QDataStream stream operators are only used from HistoryItemQt.cpp
inside WebCore, so move them there. If in the future they are required elsewhere, they should
be moved into a separate header instead of polluting headers unnecessarily.

  • history/qt/HistoryItemQt.cpp:

(operator<<):
(operator>>):

  • platform/FractionalLayoutUnit.h:
  • platform/graphics/IntPoint.h:

Source/WebKit2:

Forward declare QTransform.

  • Shared/qt/WebEventFactoryQt.h:

Source/WTF:

It seems like the QDataStream stream operators are only used from HistoryItemQt.cpp
inside WebCore, so move them there. If in the future they are required elsewhere, they should
be moved into a separate header instead of polluting headers unnecessarily.

  • wtf/Vector.h:
  • wtf/qt/StringQt.cpp:
  • wtf/text/WTFString.h:
4:21 PM Changeset in webkit [131278] by andersca@apple.com
  • 4 edits in trunk/Source/WebKit2

Explicitly mark messages variadic
https://bugs.webkit.org/show_bug.cgi?id=99229

Reviewed by Dan Bernstein.

Instead of deciding whether messages are variadic based on their type, decide it based on the existence of a 'Variadic' message attribute.

  • Scripts/webkit2/messages.py:

(messages_to_kind_enum):
(decode_type):
(async_case_statement):
(sync_case_statement):

  • UIProcess/WebPageProxy.messages.in:
  • WebProcess/WebProcess.messages.in:
3:11 PM Changeset in webkit [131277] by weinig@apple.com
  • 2 edits in trunk/Source/WebKit/win

Fix the windows build.

  • WebView.cpp:

(toStringVector):

3:05 PM Changeset in webkit [131276] by fpizlo@apple.com
  • 19 edits in trunk/Source/JavaScriptCore

IndexingType should not have a bit for each type
https://bugs.webkit.org/show_bug.cgi?id=98997

Reviewed by Oliver Hunt.

Somewhat incidentally, the introduction of butterflies led to each indexing
type being represented by a unique bit. This is superficially nice since it
allows you to test if a structure corresponds to a particular indexing type
by saying !!(structure->indexingType() & TheType). But the downside is that
given the 8 bits we have for the m_indexingType field, that leaves only a
small number of possible indexing types if we have one per bit.

This changeset changes the indexing type to be:

Bit #1: Tells you if you're an array.

Bits #2 - #5: 16 possible indexing types, including the blank type for

objects that don't have indexed properties.


Bits #6-8: Auxiliary bits that we could use for other things. Currently we

just use one of those bits, for MayHaveIndexedAccessors.


This is performance-neutral, and is primarily intended to give us more
breathing room for introducing new inferred array modes.

  • assembler/AbstractMacroAssembler.h:

(JSC::AbstractMacroAssembler::JumpList::jumps):

  • assembler/MacroAssembler.h:

(MacroAssembler):
(JSC::MacroAssembler::patchableBranch32):

  • assembler/MacroAssemblerARMv7.h:

(JSC::MacroAssemblerARMv7::patchableBranch32):
(MacroAssemblerARMv7):

  • dfg/DFGArrayMode.cpp:

(JSC::DFG::modeAlreadyChecked):

  • dfg/DFGRepatch.cpp:

(JSC::DFG::tryCacheGetByID):

  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::SpeculativeJIT::speculationCheck):
(JSC::DFG::SpeculativeJIT::forwardSpeculationCheck):
(JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode):
(DFG):
(JSC::DFG::SpeculativeJIT::checkArray):
(JSC::DFG::SpeculativeJIT::arrayify):

  • dfg/DFGSpeculativeJIT.h:

(SpeculativeJIT):

  • dfg/DFGSpeculativeJIT32_64.cpp:

(JSC::DFG::SpeculativeJIT::compile):

  • dfg/DFGSpeculativeJIT64.cpp:

(JSC::DFG::SpeculativeJIT::compile):

  • jit/JITInlineMethods.h:

(JSC::JIT::emitAllocateJSArray):
(JSC::JIT::chooseArrayMode):

  • jit/JITPropertyAccess.cpp:

(JSC::JIT::emit_op_get_by_val):
(JSC::JIT::emitContiguousGetByVal):
(JSC::JIT::emitArrayStorageGetByVal):
(JSC::JIT::emit_op_put_by_val):
(JSC::JIT::emitContiguousPutByVal):
(JSC::JIT::emitArrayStoragePutByVal):
(JSC::JIT::privateCompilePatchGetArrayLength):

  • jit/JITPropertyAccess32_64.cpp:

(JSC::JIT::emit_op_get_by_val):
(JSC::JIT::emitContiguousGetByVal):
(JSC::JIT::emitArrayStorageGetByVal):
(JSC::JIT::emit_op_put_by_val):
(JSC::JIT::emitContiguousPutByVal):
(JSC::JIT::emitArrayStoragePutByVal):
(JSC::JIT::privateCompilePatchGetArrayLength):

  • llint/LowLevelInterpreter.asm:
  • llint/LowLevelInterpreter32_64.asm:
  • llint/LowLevelInterpreter64.asm:
  • runtime/IndexingType.h:

(JSC):
(JSC::hasIndexedProperties):
(JSC::hasContiguous):
(JSC::hasFastArrayStorage):
(JSC::hasArrayStorage):
(JSC::shouldUseSlowPut):

  • runtime/JSGlobalObject.cpp:

(JSC):

  • runtime/StructureTransitionTable.h:

(JSC::newIndexingType):

2:55 PM Changeset in webkit [131275] by weinig@apple.com
  • 21 edits in trunk/Source

Make UserScript and UserStyleSheet value objects that are copyable
https://bugs.webkit.org/show_bug.cgi?id=99275

Reviewed by Tim Horton.

Source/WebCore:

Simplify UserScript and UserStyleSheet and make them more easily usable
without sticking them in an OwnPtr.

  • WebCore.exp.in:

Update exports.

  • page/PageGroup.cpp:

(WebCore::PageGroup::addUserScriptToWorld):
(WebCore::PageGroup::addUserStyleSheetToWorld):

  • page/PageGroup.h:

(PageGroup):

  • page/UserContentURLPattern.cpp:

(WebCore::UserContentURLPattern::matchesPatterns):

  • page/UserContentURLPattern.h:

(UserContentURLPattern):
Update to not assume whitelist and blacklist are in Vector<String>*.

  • page/UserScript.h:

(UserScript):
(WebCore::UserScript::UserScript):
(WebCore::UserScript::whitelist):
(WebCore::UserScript::blacklist):

  • page/UserStyleSheet.h:

(UserStyleSheet):
(WebCore::UserStyleSheet::UserStyleSheet):
(WebCore::UserStyleSheet::whitelist):
(WebCore::UserStyleSheet::blacklist):
Switch OwnPtr<Vector<String> > to Vector<String> and remove Noncopyable restriction.

Source/WebKit/chromium:

  • src/WebViewImpl.cpp:

(WebKit::WebView::addUserScript):
(WebKit::WebView::addUserStyleSheet):
Update for new PageGroup function signatures.

Source/WebKit/efl:

  • WebCoreSupport/DumpRenderTreeSupportEfl.cpp:

(DumpRenderTreeSupportEfl::addUserScript):
(DumpRenderTreeSupportEfl::addUserStyleSheet):
Update for new PageGroup function signatures.

Source/WebKit/mac:

  • WebView/WebView.mm:

(-[WebView _injectMailQuirksScript]):
(-[WebView _injectOutlookQuirksScript]):
Update for new PageGroup function signatures.

Source/WebKit2:

  • Shared/UserContentContainer.cpp:

(WebKit::toStringVector):
(WebKit::UserContentContainer::Item::Item):
(WebKit::UserContentContainer::Item::encode):
(WebKit::UserContentContainer::Item::decode):

  • Shared/UserContentContainer.h:

(WebKit::UserContentContainer::Item::whitelist):
(WebKit::UserContentContainer::Item::blacklist):
Switch UserContentContainer::Item to store Vector<String> instead of ImmutableArray, easing
transition to new PageGroup function signatures.

  • WebProcess/InjectedBundle/InjectedBundle.cpp:

(WebKit::toStringVector):

  • WebProcess/WebPage/qt/WebPageQt.cpp:

(WebKit::WebPage::setUserScripts):
Update for new PageGroup function signatures.

2:48 PM Changeset in webkit [131274] by timothy_horton@apple.com
  • 2 edits in trunk/Source/WebCore

[wk2] Implement PDFPlugin
https://bugs.webkit.org/show_bug.cgi?id=99206

Unreviewed build fix, export ZN7WebCore8IntPointC1ERK7CGPoint.

  • WebCore.exp.in:
2:32 PM Changeset in webkit [131273] by timothy_horton@apple.com
  • 2 edits in trunk/Source/WebKit2

[wk2] Implement PDFPlugin
https://bugs.webkit.org/show_bug.cgi?id=99206

Unreviewed build fix, hand ivar name to @synthesize since it doesn't match the property name.

  • WebProcess/Plugins/PDF/PDFPlugin.mm:
2:28 PM Changeset in webkit [131272] by timothy_horton@apple.com
  • 1 edit
    2 copies in trunk/Source/WebKit2

[wk2] Implement PDFPlugin
https://bugs.webkit.org/show_bug.cgi?id=99206

Unreviewed, attempt to manipuate SVN to retain the history of SimplePDFPlugin.

  • WebProcess/Plugins/PDF/SimplePDFPlugin.h: Replaced with Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFView.h.
  • WebProcess/Plugins/PDF/SimplePDFPlugin.mm: Replaced with Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFView.mm.
2:00 PM Changeset in webkit [131271] by timothy_horton@apple.com
  • 32 edits
    4 adds
    2 deletes in trunk/Source

[wk2] Implement PDFPlugin
https://bugs.webkit.org/show_bug.cgi?id=99206

Reviewed by Dan Bernstein.

Add PDFPlugin, which uses PDFKit to display PDFs, instead of using PDFKit in the
UIProcess for full-page PDFs. This new plugin will also be used for inline PDFs
in place of SimplePDFPlugin (née BuiltInPDFView).

  • Configurations/FeatureDefines.xcconfig: Add ENABLE_PDF_PLUGIN.

Support three new Plugin methods:

  • handleEditingCommand, which hands editing commands to the Plugin
  • isEditingCommandEnabled, which validates editing commands via the Plugin
  • handlesPageScaleFactor, which asks the plugin whether it wants to opt into a mode where the WebPage doesn't scale in the ordinary fashion, but instead proxies the Plugin's scale factor, so full-page plugins can handle scale factor changes however they need to.
  • PluginProcess/PluginControllerProxy.cpp:

(WebKit::PluginControllerProxy::handleEditingCommand): Proxy handleEditingCommand to the Plugin.
(WebKit::PluginControllerProxy::isEditingCommandEnabled): Proxy isEditingCommandEnabled to the Plugin.
(WebKit::PluginControllerProxy::handlesPageScaleFactor): Proxy handlesPageScaleFactor to the Plugin.

  • PluginProcess/PluginControllerProxy.h:

(PluginControllerProxy): Add handleEditingCommand, isEditingCommandEnabled, and handlesPageScaleFactor.

  • PluginProcess/PluginControllerProxy.messages.in: Add HandleEditingCommand, IsEditingCommandEnabled, and HandlesPageScaleFactor.
  • WebProcess/Plugins/Netscape/NetscapePlugin.cpp:

(WebKit::NetscapePlugin::handleEditingCommand): NPAPI plugins support no editing commands by default.
(WebKit::NetscapePlugin::isEditingCommandEnabled): NPAPI plugins enable no editing commands by default.
(WebKit::NetscapePlugin::handlesPageScaleFactor): NPAPI plugins do not handle page scale factor changes themselves by default.

  • WebProcess/Plugins/Netscape/NetscapePlugin.h: Add handleEditingCommand, isEditingCommandEnabled, and handlesPageScaleFactor.

Add PDFPluginEnabled preference. If it is not enabled, or the plugin is
not built, behavior will be the same as before (the UIProcess PDFView will
handle full-page PDFs, and SimplePDFPlugin will handle inline ones).

  • Shared/WebPreferencesStore.h: Add PDFPluginEnabled preference.
  • UIProcess/API/C/WKPreferences.cpp:

(WKPreferencesSetPDFPluginEnabled): Setter for PDFPluginEnabled preference.
(WKPreferencesGetPDFPluginEnabled): Getter for PDFPluginEnabled preference.

  • UIProcess/API/C/WKPreferencesPrivate.h: Expose WKPreferences(Set|Get)PDFPluginEnabled as a private preference.

Move support for MIME types with custom representations onto WebPage instead of WebProcess.
This allows us to use preferences to control the use of custom representations (for example,
it allows us to have a preference to toggle between UIProcess's PDFView and PDFPlugin).

  • Shared/WebProcessCreationParameters.cpp:

(WebKit::WebProcessCreationParameters::encode): Don't pass mimeTypesWithCustomRepresentation
into the WebProcess, as we can compute it later.
(WebKit::WebProcessCreationParameters::decode): Same, on the decode side.

  • Shared/WebProcessCreationParameters.h: Remove mimeTypesWithCustomRepresentation.
  • UIProcess/mac/WebContextMac.mm:

(WebKit::WebContext::platformInitializeWebProcess): Don't add pdfAndPostScriptMIMETypes to mimeTypesWithCustomRepresentation here, as we're now computing it on WebPage instead.

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::canPluginHandleResponse): Move to WebPage from WebProcess so we can use WebPage's new notion of mimeTypesWithCustomRepresentation.
(WebKit::WebPage::shouldUseCustomRepresentationForResponse): Move to WebPage from WebProcess so we can use WebPage's new notion of mimeTypesWithCustomRepresentation.

  • WebProcess/WebPage/mac/WebPageMac.mm:

(WebKit::WebPage::pdfAndPostScriptMIMETypes): Return the set of MIME types used for PDF and PostScript, which are handled with PDFView if PDFPlugin is not available or enabled.

  • WebProcess/WebProcess.cpp:

(WebKit::WebProcess::initializeWebProcess): Don't keep m_mimeTypesWithCustomRepresentations on WebProcess, it's owned by WebPage now.

  • WebProcess/WebProcess.h: Move canPluginHandleResponse and shouldUseCustomRepresentationForResponse to WebPage.

Add PDFLayerController to the set of classes returned by PDFKitImports.

  • Shared/mac/PDFKitImports.h: Add pdfLayerControllerClass.
  • Shared/mac/PDFKitImports.mm:

(WebKit::pdfLayerControllerClass): Find and return the PDFLayerController class.

Add PDFPlugin, which inherits from SimplePDFPlugin, but uses PDFKit instead
of CoreGraphics, to provide additional interactive functionality.

  • UIProcess/WebProcessProxy.cpp:

(WebKit::WebProcessProxy::sendDidGetPlugins): Add PDFPlugin to the set of supported plugins.

  • WebKit2.xcodeproj/project.pbxproj: Add PDFPlugin, rename BuiltInPDFView to SimplePDFPlugin.
  • WebProcess/Plugins/PDF/PDFPlugin.h: Added.
  • WebProcess/Plugins/PDF/PDFPlugin.mm: Added.

PDFPlugin uses layers for scrollbars.

(-[WKPDFPluginScrollbarLayer initWithPDFPlugin:WebKit::]): Initialize our CALayer subclass,
storing its parent PDFPlugin so it can delegate drawing there.
(-[WKPDFPluginScrollbarLayer actionForKey:]): Disable CoreAnimation implicit actions.
(-[WKPDFPluginScrollbarLayer drawInContext:]): Delegate scrollbar drawing to PDFPlugin.

Implement the PDFLayerController delegate, eventually forwarding calls back to PDFPlugin.

(-[WKPDFLayerControllerDelegate initWithPDFPlugin:WebKit::]): Initialize our delegate,
storing its parent PDFPlugin so it can forward delegate calls there.
(-[WKPDFLayerControllerDelegate updateScrollPosition:]): Update PDFPlugin's notion of the
current scroll position, when PDFKit changes the scroll position itself.
(-[WKPDFLayerControllerDelegate writeItemsToPasteboard:withTypes:]): Write the given
array of NSData objects to the pasteboard with the given types.

The following PDFLayerController delegate methods will be implemented in the future.

(-[WKPDFLayerControllerDelegate showDefinitionForAttributedString:atPoint:]):
(-[WKPDFLayerControllerDelegate performWebSearch:]):
(-[WKPDFLayerControllerDelegate openWithPreview]):
(-[WKPDFLayerControllerDelegate saveToPDF]):

(WebKit::PDFPlugin::PDFPlugin): Set up the requisite layer hierarchy, and create a PDFLayerController (and its delegate proxy).
(WebKit::PDFPlugin::updateScrollbars): Update the frame of the layers hosting our scrollbars.
(WebKit::PDFPlugin::createScrollbar): Create a scrollbar and hosting layer, attaching its layer
to PDFPlugin's container layer.
(WebKit::PDFPlugin::destroyScrollbar): Destroy a scrollbar, detaching and destroying its hosting layer in the process.
(WebKit::PDFPlugin::pdfDocumentDidLoad): Called when the document finishes loading; hand
the loaded document to PDFKit, update all of our state (cached document size, scrollbars, etc.), and then execute any scripts in the document (to allow for automatic printing).
(WebKit::PDFPlugin::calculateSizes): Determine the size of the PDF and its pages.
(WebKit::PDFPlugin::destroy): Tear down the layer hierarchy.
(WebKit::PDFPlugin::paint): PDFPlugin is layer-based, so we paint nothing into the tiles.
(WebKit::PDFPlugin::paintControlForLayerInContext): Scrollbar controls are drawn into layers, but their painting is delegated here from WKPDFPluginScrollbarLayer.
(WebKit::PDFPlugin::snapshot): Perform a paint into a bitmap context.
(WebKit::PDFPlugin::pluginLayer): Return PDFPlugin's root layer.
(WebKit::PDFPlugin::geometryDidChange): The size or scale of the plugin changed; update
PDFLayerController's notion of the size and page scale, and invalidate the scrollbars.

Mouse and keyboard events are converted back into NSEvents, but with
locationInWindow actually in terms of the PDFPlugin's layer, not
the window (since there is no window).

(WebKit::modifierFlagsFromWebEvent): Construct an AppKit-style modifier bitmask from WebEvent's modifier key getters.
(WebKit::eventTypeFromWebEvent): Return the NSEventType equivalent to the given WebEvent. Only supports keyboard and mouse events, and only the left and right mouse button.
(WebKit::PDFPlugin::handleMouseEvent): Construct an NSEvent from the given WebMouseEvent and hand it to PDFLayerController. Mouse coordinates are in terms of m_contentLayer's origin.
(WebKit::PDFPlugin::handleKeyboardEvent): Construct an NSEvent from the given WebKeyboardEvent and hand it to PDFLayerController. PDFLayerController currently only handles keyDown events.

(WebKit::PDFPlugin::handleEditingCommand): Handle copy and select-all commands, and forward them to PDFLayerController.
(WebKit::PDFPlugin::isEditingCommandEnabled): The 'copy' command should be enabled if
the user has selected a part of the PDF. The 'select all' command should always be enabled.

(WebKit::PDFPlugin::setScrollOffset): Update both PDFPlugin and PDFLayerController's notion
of the current scroll position.
(WebKit::PDFPlugin::invalidateScrollbarRect): Invalidate the whole scrollbar layer.
(WebKit::PDFPlugin::invalidateScrollCornerRect): Invalidate the whole scroll corner layer.

Rename BuiltInPDFView to SimplePDFPlugin, to differentiate it from PDFPlugin
and to better denote its inheritance from Plugin.

  • WebProcess/Plugins/PDF/SimplePDFPlugin.h: Renamed from WebProcess/Plugins/PDF/BuiltInPDFView.h.

(WebKit::SimplePDFPlugin): Make methods protected so PDFPlugin can override them. Rename m_pluginSize -> m_size, and m_dataBuffer->m_data.
(WebKit::SimplePDFPlugin::size): Retrieve the size of the plugin.
(WebKit::SimplePDFPlugin::setSize): Set the size of the plugin.
(WebKit::SimplePDFPlugin::pdfDocument): Retrieve the currently represented PDF document.
(WebKit::SimplePDFPlugin::setPDFDocument): Set the currently represented PDF document.
(WebKit::SimplePDFPlugin::pdfDocumentSize): Retrieve the current size of the PDF.
(WebKit::SimplePDFPlugin::setPDFDocumentSize): Set the current size of the PDF.
(WebKit::SimplePDFPlugin::data): Retrieve the accumulated document data.

  • WebProcess/Plugins/PDF/SimplePDFPlugin.mm: Renamed from WebProcess/Plugins/PDF/BuiltInPDFView.mm.

(WebKit::SimplePDFPlugin::computePageBoxes): Copied out of calculateSizes() so PDFPlugin can use it too.
(WebKit::SimplePDFPlugin::runScriptsInPDFDocument): Factored out of pdfDocumentDidLoad() so PDFPlugin can use it too.
(WebKit::SimplePDFPlugin::convertFromScrollbarToContainingView): Implement the remaining scrollbar point conversion functions.
(WebKit::SimplePDFPlugin::convertFromContainingViewToScrollbar): Implement the remaining scrollbar point conversion functions.

  • WebProcess/Plugins/Plugin.h:

(Plugin): Add handleEditingCommand, isEditingCommandEnabled, and handlesPageScaleFactor.

  • WebProcess/Plugins/PluginProxy.cpp:

(WebKit::PluginProxy::handleEditingCommand): Proxy handleEditingCommand to the PluginProcess.
(WebKit::PluginProxy::isEditingCommandEnabled): Proxy isEditingCommandEnabled
to the PluginProcess.
(WebKit::PluginProxy::handlesPageScaleFactor): Proxy handlesPageScaleFactor
to the PluginProcess.

  • WebProcess/Plugins/PluginProxy.h: Add handleEditingCommand, isEditingCommandEnabled,

and handlesPageScaleFactor.

  • WebProcess/Plugins/PluginView.cpp:

(WebKit::PluginView::setPageScaleFactor): Set the plugin's current page scale factor. Also,
update WebPageProxy's notion of the current pageScaleFactor when this is called.
(WebKit::PluginView::pageScaleFactor): Return the plugin's current page scale factor.
(WebKit::PluginView::handleEditingCommand): Proxy handleEditingCommand to the plugin.
(WebKit::PluginView::isEditingCommandEnabled): Proxy isEditingCommandEnabled to the plugin.

  • WebProcess/Plugins/PluginView.h:

(PluginView): Add handleEditingCommand, isEditingCommandEnabled,
setPageScaleFactor/pageScaleFactor, and handlesPageScaleFactor. Add m_pageScaleFactor.
(WebKit::PluginView::handlesPageScaleFactor): Proxy handlesPageScaleFactor to the plugin.

  • WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:

(WebKit::WebFrameLoaderClient::restoreViewState): Don't update WebPageProxy's notion of the scale factor if it should be the default.
(WebKit::WebFrameLoaderClient::transitionToCommittedFromCachedFrame): Make use of shouldUseCustomRepresentationForResponse on WebPage instead of WebProcess.
(WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage): Make use of shouldUseCustomRepresentationForResponse on WebPage instead of WebProcess.

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::createPlugin): Create a PDFPlugin if appropriate (if it is built and the setting is enabled).
(WebKit::pluginViewForFrame): Return the PluginView for the given frame if its document is a PluginDocument.
(WebKit::WebPage::executeEditingCommand): Attempt to execute editing commands on the
currently focused (or main-frame) plugin.
(WebKit::WebPage::isEditingCommandEnabled): Validate editing commands against the
currently focused (or main-frame) plugin.
(WebKit::WebPage::scalePage): If the plugin reports that it handles page scale factor
itself, hand it the new scale instead of WebCore.
(WebKit::WebPage::pageScaleFactor): If the plugin reports that it handles page scale
factor itself, return its notion of the current scale instead of WebCore's.
(WebKit::WebPage::validateCommand): Validate editing commands against the
currently focused (or main-frame) plugin.
(WebKit::WebPage::updatePreferences): Update m_pdfPluginEnabled given the relevant WebPreference.

  • WebProcess/WebPage/WebPage.h:

(WebKit::WebPage::pdfPluginEnabled): Return whether or not PDFPlugin should be used.
(WebKit::WebPage::setPDFPluginEnabled): Set whether or not PDFPlugin should be used.

  • WebCore.exp.in:

Export a few more methods to WebKit(2).

  • WebCore.xcodeproj/project.pbxproj:

Expose Pasteboard.h as a private header so PDFPlugin can use it.

  • platform/ScrollableArea.h:

Make invalidateScrollbar/invalidateScrollCorner virtual.

1:22 PM Changeset in webkit [131270] by fpizlo@apple.com
  • 2 edits in trunk/Source/JavaScriptCore

DFG structure check hoisting should attempt to ignore side effects and make transformations that are sound even in their presence
https://bugs.webkit.org/show_bug.cgi?id=99262

Reviewed by Oliver Hunt.

This hugely simplifies the structure check hoisting phase. It will no longer be necessary
to modify it when the effectfulness of operations changes. This also enables the hoister
to hoist effectful things in the future.

The downside is that the hoister may end up adding strictly more checks than were present
in the original code, if the code truly has a lot of side-effects. I don't see evidence
of this happening. This patch does have some speed-ups and some slow-downs, but is
neutral in the average, and the slow-downs do not appear to have more structure checks
than ToT.

  • dfg/DFGStructureCheckHoistingPhase.cpp:

(JSC::DFG::StructureCheckHoistingPhase::run):
(JSC::DFG::StructureCheckHoistingPhase::noticeStructureCheck):
(StructureCheckHoistingPhase):
(CheckData):
(JSC::DFG::StructureCheckHoistingPhase::CheckData::CheckData):

12:58 PM Changeset in webkit [131269] by fpizlo@apple.com
  • 3 edits in trunk/Source/JavaScriptCore

Fix the build of universal binary with ARMv7s of JavaScriptCore

  • llint/LLIntOfflineAsmConfig.h:
  • llint/LowLevelInterpreter.asm:
12:42 PM Changeset in webkit [131268] by fpizlo@apple.com
  • 2 edits in trunk/Source/JavaScriptCore

Array length array profiling is broken in the baseline JIT
https://bugs.webkit.org/show_bug.cgi?id=99258

Reviewed by Oliver Hunt.

The code generator for array length stubs calls into
emitArrayProfilingSiteForBytecodeIndex(), which emits profiling only if
canBeOptimized() returns true. But m_canBeOptimized is only initialized during
full method compiles, so in a stub compile it may (or may not) be false, meaning
that we may, or may not, get meaningful profiling info.

This appeared to not affect too many programs since the LLInt has good array
length array profiling.

  • jit/JIT.h:

(JSC::JIT::compilePatchGetArrayLength):

9:22 AM Changeset in webkit [131267] by Patrick Gansterer
  • 2 edits in trunk/Source/JavaScriptCore

Build fix for WinCE after r131089.

WinCE does not support getenv().

  • runtime/Options.cpp:

(JSC::overrideOptionWithHeuristic):

7:58 AM Changeset in webkit [131266] by Patrick Gansterer
  • 2 edits in trunk

Unreviewed, rolling out r130656.
http://trac.webkit.org/changeset/130656
https://bugs.webkit.org/show_bug.cgi?id=97592

Broke CMake build on Windows

  • CMakeLists.txt:
7:19 AM Changeset in webkit [131265] by timothy@apple.com
  • 4 edits in trunk/Source/WebCore

InspectorPageAgent should expose a method to control the compositing debug settings.
https://bugs.webkit.org/show_bug.cgi?id=99253

Patch by Antoine Quint <Antoine Quint> on 2012-10-14
Reviewed by Timothy Hatcher.

  • inspector/Inspector.json:
  • inspector/InspectorPageAgent.cpp:

(WebCore::InspectorPageAgent::setCompositingBordersVisible):

  • inspector/InspectorPageAgent.h:

Oct 13, 2012:

7:21 PM Changeset in webkit [131264] by weinig@apple.com
  • 8 edits in trunk/Source/WebKit2

Use class extension rather than a void* member for new Objective-C WebProcessPlugIn SPI
https://bugs.webkit.org/show_bug.cgi?id=99256

Reviewed by Dan Bernstein.

A bit of good old fashion cleanup.

  • WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:

Remove the void* member.

  • WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:

Move members from the WKWebProcessPlugInControllerData struct to a class extension.

(didCreatePage):
(willDestroyPage):
(-[WKWebProcessPlugInController _initWithPrincipalClassInstance:bundleRef:]):
Directly access the members instead of using properties, now that it is not inconvenient.

  • WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h:

Remove the void* member.

  • WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:

Move members from the WKWebProcessPlugInBrowserContextControllerData struct to a class extension.

(-[WKWebProcessPlugInBrowserContextController _initWithBundlePageRef:]):
(-[WKWebProcessPlugInBrowserContextController _bundlePageRef]):
Remove unnecessary casts..

  • WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerInternal.h:
  • WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerPrivate.h:

Add space before the parenthesis of a category to be consistent.

  • WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h:

Remove unnecessary forward declare.

5:58 PM Changeset in webkit [131263] by aestes@apple.com
  • 3 edits
    1 add in trunk/Source/WebKit2

Add a private header for WKWebProcessPlugInBrowserContextController that defines a property for getting the WKBundlePageRef
https://bugs.webkit.org/show_bug.cgi?id=99252

Reviewed by Sam Weinig.

  • WebKit2.xcodeproj/project.pbxproj:
  • WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:

(-[WKWebProcessPlugInBrowserContextController _bundlePageRef]):

  • WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerPrivate.h: Added.
11:21 AM Changeset in webkit [131262] by crogers@google.com
  • 8 edits in trunk/Source

WebAudioBus needs support for resizing bus to a smaller size
https://bugs.webkit.org/show_bug.cgi?id=99215

Reviewed by Dimitri Glazkov.

Upgrade AudioBus and WebAudioBus to support resizing to a smaller size, once it has been created.
This is useful, for example, when decoding VBR formats and the actual length can't be exactly determined
until the entire file is decoded.

Source/Platform:

  • chromium/public/WebAudioBus.h:

(WebAudioBus):

Source/WebCore:

  • platform/audio/AudioBus.cpp:

(WebCore::AudioBus::resizeSmaller):
(WebCore):

  • platform/audio/AudioBus.h:

(AudioBus):

  • platform/audio/AudioChannel.cpp:

(WebCore::AudioChannel::resizeSmaller):
(WebCore):

  • platform/audio/AudioChannel.h:

(AudioChannel):

  • platform/chromium/support/WebAudioBus.cpp:

(WebKit::WebAudioBus::resizeSmaller):
(WebKit):

10:55 AM Changeset in webkit [131261] by commit-queue@webkit.org
  • 3 edits in trunk/Source/WebCore

Add warning for unrenderable textures
https://bugs.webkit.org/show_bug.cgi?id=99235

Patch by Gregg Tavares <gman@google.com> on 2012-10-13
Reviewed by Kenneth Russell.

Unrenderable textures are often hard to debug. Adds a message to that
appears in the JavaScript console to help developers find the issue.

No new tests as no new functionality.

  • html/canvas/WebGLRenderingContext.cpp:

(WebCore):
(WebCore::WebGLRenderingContext::drawArrays):
(WebCore::WebGLRenderingContext::drawElements):
(WebCore::WebGLRenderingContext::handleNPOTTextures):

  • html/canvas/WebGLRenderingContext.h:

(WebGLRenderingContext):

10:04 AM Changeset in webkit [131260] by ggaren@apple.com
  • 2 edits in trunk/Source/WebCore

Not reviewed.

Updated bindings test results.

  • bindings/scripts/test/JS/JSTestEventTarget.cpp:

(WebCore::JSTestEventTarget::getOwnPropertySlotByIndex):

9:57 AM Changeset in webkit [131259] by zandobersek@gmail.com
  • 2 edits in trunk/Tools

[TestResultServer] Unit tests require an update after r131239
https://bugs.webkit.org/show_bug.cgi?id=99236

Reviewed by Ojan Vafai.

Replacing 'Webkit' with 'WebKit' in builder names througout the unit tests
after the Chromium builders have been renamed recently.

  • TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
9:46 AM Changeset in webkit [131258] by ggaren@apple.com
  • 2 edits in trunk/Source/WebCore

I pity da foo' who's converting numbers to strings
https://bugs.webkit.org/show_bug.cgi?id=99197

Reviewed by Gavin Barraclough.

40% speedup on PerformanceTests/Dromaeo/dom-traverse.html. Probably speeds
some other things up too.

Credit to Eric Seidel for spotting this.

  • bindings/scripts/CodeGeneratorJS.pm:

(GenerateImplementation): getOwnPropertySlotByIndex doesn't need to prefer
string lookup in the static table because our static tables don't contain
properties that are numbers.

I believe this is low-hanging fruit left behind by Phil's
getOwnPropertySlotByIndex optimization, but it's also possible that this was a
regression at some point. I didn't check.

6:20 AM Changeset in webkit [131257] by jpetsovits@rim.com
  • 12 edits
    4 adds in trunk/Source/WebKit

[BlackBerry] Fetch blit rects from a viewport accessor
https://bugs.webkit.org/show_bug.cgi?id=98581
RIM PR 173292

Reviewed by George Staikos.
Internally reviewed by Arvid Nilsson.

Source/WebKit:

Add new ViewportAccessor files to the build.
See Source/WebKit/blackberry/ChangeLog for the
verbose commit message.

  • PlatformBlackBerry.cmake:

Source/WebKit/blackberry:

The long-standing userInterfaceBlittedVisibleContentsRect()
method in WebPageClient has long been a major annoyance,
as it returns the source rect for WebKit contents but in
backingstore pixel coordinates. This makes it not only
unwieldy but also terribly fragile, especially when
both pinch zoom and a backingstore re-render both deal
with the same rectangle. On different threads, even.

BlackBerry::Platform now exposes a ViewportAccessor
interface, which can be used to get the various rects
in document coordinates or target pixel coordinates,
both being a better choice than the ones dependent
on an implentation detail.

This commit makes use of this new functionality.
Instead of relying on the passed rectangle to contain
implicit information about the scale factor, we now
track the scale of each backingstore geometry by making
a snapshot of the current WebKit-thread scale when the
geometry is generated. Once the geometry is swapped to
the front, we can then calculate the remaining
backingstore-to-viewport transformation in a threadsafe
way. We now only calculate this if we actually blit from
backingstore tiles and don't go through a configuration
of pure accelerated compositing.

As a result, we are now a lot more robust against
synchonization issues related to backingstore
geometry changes. As an additional gimmick, the scale
is also stored with each tile buffer to doubly secure
that a tile rendered in one scale is not transferred
to a different geometry and then rendered there without
being rerendered at the new scale, even if the rendered
pixel coordinates are still the same.

Having per-geometry scale information also opens up
opportunities to further improve backingstore rendering
later. For instance, we could pre-render a low-res
version of the page onto one buffer and combine that one
with a higher-res array of tiles covering a smaller area.
Or we could steal some tiles from the front geometry to
render them at a new scale while a pinch-zoom operation
is in progress.

No such thing is implemented in this patch though.

In adapting/fixing the backingstore visualization
debug mode and the default background painting in
renderDirectToWindow(), we also introduce new
ViewportAccessor subclasses that can subsequently
be used to replace methods from WebPage and elsewhere.

  • Api/BackingStore.cpp:

(BlackBerry::WebKit::BackingStorePrivate::slowScroll):
(BlackBerry::WebKit::BackingStorePrivate::scroll):
(BlackBerry::WebKit::BackingStorePrivate::setBackingStoreRect):
(BlackBerry::WebKit::BackingStorePrivate::scrollBackingStore):
(BlackBerry::WebKit::BackingStorePrivate::renderDirectToWindow):
(BlackBerry::WebKit::BackingStorePrivate::render):
(BlackBerry::WebKit::BackingStorePrivate::paintDefaultBackground):
(BlackBerry::WebKit::BackingStorePrivate::blitVisibleContents):
(BlackBerry::WebKit::BackingStorePrivate::blitHorizontalScrollbar):
(BlackBerry::WebKit::BackingStorePrivate::blitVerticalScrollbar):
(BlackBerry::WebKit::BackingStorePrivate::updateTilesForScrollOrNotRenderedRegion):
(BlackBerry::WebKit::BackingStorePrivate::updateTileMatrixIfNeeded):
(BlackBerry::WebKit::BackingStorePrivate::orientationChanged):
(BlackBerry::WebKit::BackingStorePrivate::createSurfaces):
(BlackBerry::WebKit::BackingStorePrivate::invalidateWindow):

  • Api/BackingStore_p.h:

(BlackBerry):
(Platform):
(BlackBerry::WebKit::BackingStoreGeometry::BackingStoreGeometry):
(BlackBerry::WebKit::BackingStoreGeometry::scale):
(BlackBerry::WebKit::BackingStoreGeometry::setScale):
(BackingStoreGeometry):
(BackingStorePrivate):

  • Api/WebPage.cpp:

(BlackBerry::WebKit::WebPagePrivate::WebPagePrivate):
(BlackBerry::WebKit::WebPagePrivate::~WebPagePrivate):
(BlackBerry::WebKit::WebPagePrivate::init):
(BlackBerry::WebKit::WebPage::webkitThreadViewportAccessor):
(WebKit):

  • Api/WebPage.h:

(Platform):

  • Api/WebPageClient.h:

(Platform):

  • Api/WebPageCompositor.cpp:

(BlackBerry::WebKit::WebPageCompositorPrivate::animationFrameChanged):

  • Api/WebPage_p.h:

(WebKit):
(WebPagePrivate):

  • WebKitSupport/BackingStoreTile.cpp:

(BlackBerry::WebKit::TileBuffer::TileBuffer):
(BlackBerry::WebKit::TileBuffer::isRendered):

  • WebKitSupport/BackingStoreTile.h:

(TileBuffer):
(BlackBerry::WebKit::TileBuffer::scale):
(BlackBerry::WebKit::TileBuffer::setScale):

  • WebKitSupport/BackingStoreVisualizationViewportAccessor.cpp: Added.

(WebKit):
(BlackBerry::WebKit::BackingStoreVisualizationViewportAccessor::BackingStoreVisualizationViewportAccessor):
(BlackBerry::WebKit::BackingStoreVisualizationViewportAccessor::pixelContentsSize):
(BlackBerry::WebKit::BackingStoreVisualizationViewportAccessor::documentContentsSize):
(BlackBerry::WebKit::BackingStoreVisualizationViewportAccessor::pixelScrollPosition):
(BlackBerry::WebKit::BackingStoreVisualizationViewportAccessor::documentScrollPosition):
(BlackBerry::WebKit::BackingStoreVisualizationViewportAccessor::pixelViewportSize):
(BlackBerry::WebKit::BackingStoreVisualizationViewportAccessor::documentViewportSize):
(BlackBerry::WebKit::BackingStoreVisualizationViewportAccessor::destinationSurfaceOffset):
(BlackBerry::WebKit::BackingStoreVisualizationViewportAccessor::scale):
(BlackBerry::WebKit::BackingStoreVisualizationViewportAccessor::state):

  • WebKitSupport/BackingStoreVisualizationViewportAccessor.h: Added.

(BlackBerry):
(Platform):
(WebKit):
(BackingStoreVisualizationViewportAccessor):
(BlackBerry::WebKit::BackingStoreVisualizationViewportAccessor::~BackingStoreVisualizationViewportAccessor):

  • WebKitSupport/WebKitThreadViewportAccessor.cpp: Added.

(WebKit):
(BlackBerry::WebKit::WebKitThreadViewportAccessor::WebKitThreadViewportAccessor):
(BlackBerry::WebKit::WebKitThreadViewportAccessor::pixelContentsSize):
(BlackBerry::WebKit::WebKitThreadViewportAccessor::documentContentsSize):
(BlackBerry::WebKit::WebKitThreadViewportAccessor::pixelScrollPosition):
(BlackBerry::WebKit::WebKitThreadViewportAccessor::documentScrollPosition):
(BlackBerry::WebKit::WebKitThreadViewportAccessor::pixelViewportSize):
(BlackBerry::WebKit::WebKitThreadViewportAccessor::documentViewportSize):
(BlackBerry::WebKit::WebKitThreadViewportAccessor::destinationSurfaceOffset):
(BlackBerry::WebKit::WebKitThreadViewportAccessor::scale):

  • WebKitSupport/WebKitThreadViewportAccessor.h: Added.

(BlackBerry):
(Platform):
(WebKit):
(WebKitThreadViewportAccessor):
(BlackBerry::WebKit::WebKitThreadViewportAccessor::~WebKitThreadViewportAccessor):

12:18 AM Changeset in webkit [131256] by abarth@webkit.org
  • 2 edits in trunk/Source/WebCore

Remove dead code in Node.idl
https://bugs.webkit.org/show_bug.cgi?id=99237

Reviewed by Maciej Stachowiak.

We don't implement this feature. This code is dead and should be
removed.

  • dom/Node.idl:
Note: See TracTimeline for information about the timeline view.