blob: e1d0cc3155596b348f29ceaebc647daf6aaf035e [file] [log] [blame]
2010-02-19 Simon Fraser <simon.fraser@apple.com>
Reviewed by Dan Bernstein.
<rdar://problem/7535894> Page contents missing from snapshot on Newsweek.com article
Followup to avoid capturing compositing layers twice in snapshots. Add private
methods to WebView to specify whether drawing the WebView into an image will
include flattened compositing layers (the default behavior) or not.
* WebView/WebFrame.mm:
(-[WebFrame _drawRect:contentsOnly:]): Consult the WebView flag to see if we
want flattening.
* WebView/WebViewPrivate.h: New methods.
* WebView/WebView.mm: Ditto.
(-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
(-[WebView _setIncludesFlattenedCompositingLayersWhenDrawingToBitmap:]):
(-[WebView _includesFlattenedCompositingLayersWhenDrawingToBitmap]):
* WebView/WebViewData.h: New member variable.
2010-02-19 Alexey Proskuryakov <ap@apple.com>
Reviewed by Dan Bernstein.
https://bugs.webkit.org/show_bug.cgi?id=35165
plugins/set-status.html fails on Windows bot
* Plugins/Hosted/NetscapePluginInstanceProxy.mm:
(WebKit::NetscapePluginInstanceProxy::status):
* Plugins/WebNetscapePluginView.mm:
(-[WebNetscapePluginView status:]):
Match Windows port behavior (and also Firefox one, in a way) - pass null status messages as
empty ones to chrome.
2010-02-18 Simon Fraser <simon.fraser@apple.com>
Reviewed by Dan Bernstein.
<rdar://problem/7535894> Page contents missing from snapshot on Newsweek.com article
Add logic to determine when painting via the software rendering path will give an equivalent
result to the accelerated compositing presentation. This tests for the presence of 3D transforms.
Also have -[WebFrame _drawRect:contentsOnly:] set the PaintBehaviorFlattenCompositingLayers
paint behavior when painting into a bitmap context, so that snapshots contain composited layers.
* WebView/WebFrame.mm:
(-[WebFrame _drawRect:contentsOnly:]): Set the PaintBehaviorFlattenCompositingLayers flag
when painting into a bitmap context.
* WebView/WebView.mm:
(-[WebView _isSoftwareRenderable]): Returns YES if all frames can be software-rendered.
* WebView/WebViewPrivate.h: New _isSoftwareRenderable method.
2010-02-18 Alexey Proskuryakov <ap@apple.com>
Reviewed by Dan Bernstein.
https://bugs.webkit.org/show_bug.cgi?id=35134
<rdar://problem/7246280> Crash when a plugin calls NPN_SetStatus(0)
Test: plugins/set-status.html
* Plugins/Hosted/NetscapePluginInstanceProxy.mm:
(WebKit::NetscapePluginInstanceProxy::status):
(WebKit::NetscapePluginInstanceProxy::loadURL):
Added null checks for CFStringCreateWithCString arguments.
2010-02-17 Dmitry Titov <dimich@chromium.org>
Reviewed by David Levin, Darin Fisher, Simon Hausmann.
When a live iframe element is moved between pages, it still depends on the old page.
https://bugs.webkit.org/show_bug.cgi?id=34382
* WebCoreSupport/WebFrameLoaderClient.h:
* WebCoreSupport/WebFrameLoaderClient.mm:
Added empty implementation of a new virtual method.
(WebFrameLoaderClient::didTransferChildFrameToNewDocument):
2010-02-17 Kent Tamura <tkent@chromium.org>
Reviewed by Eric Seidel.
Introduces new Icon loading interface in order to support
asynchronous loading.
https://bugs.webkit.org/show_bug.cgi?id=32054
Add an empty implementation of ChromeClient::iconForFiles().
* WebCoreSupport/WebChromeClient.h:
* WebCoreSupport/WebChromeClient.mm:
(WebChromeClient::iconForFiles):
2010-02-17 Timothy Hatcher <timothy@apple.com>
Add a way for WebView and its dependancies to be selectively included
in WebKitStatistics leak tracking. By default WebView is not included and
you need to subclass WebView and implement +isIncludedInWebKitStatistics
to be included.
rdar://problem/7567677&7572900
https://webkit.org/b/35045
Reviewed by Adam Roben.
* WebView/WebDataSource.mm:
(-[WebDataSource _initWithDocumentLoader:]): Increment WebDataSourceCount if the WebFrame is included in statistics.
(-[WebDataSource dealloc]): Only --WebDataSourceCount if _private->includedInWebKitStatistics is YES.
(-[WebDataSource finalize]): Ditto.
* WebView/WebFrame.mm:
(-[WebFrame _isIncludedInWebKitStatistics]): Return _private->includedInWebKitStatistics.
(-[WebFrame _initWithWebFrameView:webView:]): Increment WebFrameCount if the WebView's class is included in statistics.
(-[WebFrame dealloc]): Only --WebFrameCount if _private->includedInWebKitStatistics is YES.
(-[WebFrame finalize]): Ditto.
* WebView/WebFrameInternal.h:
* WebView/WebFrameView.mm:
(-[WebFrameView _setWebFrame:]): Increment WebFrameViewCount if the WebFrame is included in statistics.
(-[WebFrameView initWithFrame:]): Move ++WebFrameViewCount from here since we don't
know what WebFrame we belong to yet.
(-[WebFrameView dealloc]): Only --WebFrameViewCount if _private->includedInWebKitStatistics is YES.
(-[WebFrameView finalize]): Ditto.
* WebView/WebHTMLRepresentation.mm:
(-[WebHTMLRepresentation init]): Move ++WebHTMLRepresentationCount from here since we don't
know what WebFrame we belong to yet.
(-[WebHTMLRepresentation dealloc]): Only --WebHTMLRepresentationCount if _private->includedInWebKitStatistics is YES.
(-[WebHTMLRepresentation finalize]): Ditto.
(-[WebHTMLRepresentation setDataSource:]): Increment WebHTMLRepresentationCount if the WebFrame of the dataSource is
included in statistics.
* WebView/WebView.mm:
(-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
(-[WebView dealloc]):
(+[WebView shouldIncludeInWebKitStatistics]): Return NO, so any WebView wont be included.
Subclasses that care can return YES to be included.
* WebView/WebViewInternal.h:
2010-02-16 Darin Adler <darin@apple.com>
Reviewed by Sam Weinig.
Generalize delayed plug-in start for background tabs for use for other media
https://bugs.webkit.org/show_bug.cgi?id=34981
* WebView/WebHTMLView.mm:
(-[WebHTMLView viewWillMoveToWindow:]): Added comment.
(-[WebHTMLView viewDidMoveToWindow]): Ditto.
* WebView/WebView.mm:
(-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
Call setCanStartMedia right away so that if this view is not in a window, it
will not start any media.
(-[WebView viewWillMoveToWindow:]): Call setCanStartMedia(false) when moving
to a window of nil.
(-[WebView viewDidMoveToWindow]): Call setCanStartMedia(true) when moved to
a window that is non-nil.
2010-02-16 Eric Carlson <eric.carlson@apple.com>
Reviewed by Simon Fraser.
https://bugs.webkit.org/show_bug.cgi?id=34988
WebHTMLView.mm has two -willRemoveSubview: methods
* WebView/WebHTMLView.mm:
(-[WebHTMLView willRemoveSubview:]): Consolidate the two copies of this method.
2010-02-16 Alexey Proskuryakov <ap@apple.com>
Reviewed by Geoffrey Garen and Kevin Decker.
https://bugs.webkit.org/show_bug.cgi?id=34989
<rdar://problem/7417965> Cursor disappears on scroll bars that are over plugin content
This fixes event dispatch for both Cocoa and Carbon event models (mouseEntered/mouseExited
in the former case, and adjustCursor in the latter).
* Plugins/Hosted/WebHostedNetscapePluginView.mm:
(-[WebHostedNetscapePluginView handleMouseEntered:]):
(-[WebHostedNetscapePluginView handleMouseExited:]):
* Plugins/WebBaseNetscapePluginView.h:
* Plugins/WebBaseNetscapePluginView.mm:
(-[WebBaseNetscapePluginView handleMouseEntered:]):
(-[WebBaseNetscapePluginView handleMouseExited:]):
* Plugins/WebNetscapePluginView.h:
* Plugins/WebNetscapePluginView.mm:
(-[WebNetscapePluginView handleMouseEntered:]):
(-[WebNetscapePluginView handleMouseExited:]):
AppKit cannot reliably dispatch events for overlapping views. We are now asking WebCore to
notify plug-in views of mouse entered/exited as part of DOM event dispatch.
* WebCoreSupport/WebFrameLoaderClient.mm: (NetscapePluginWidget::handleEvent): Besides
mouse moved, dispatch plugin mouse entered/exit events in HTMLPlugInElement default event
handler. Other mouse events are passed down by EventHandler.
2010-02-15 Alexey Proskuryakov <ap@apple.com>
More build fixing (for what is actually a 64-bit failure, as 32-bit apparently includes
headers that aren't included in 64-bit).
* Plugins/Hosted/NetscapePluginInstanceProxy.h:
* Plugins/Hosted/NetscapePluginInstanceProxy.mm:
(WebKit::NetscapePluginInstanceProxy::LocalObjectMap::contains):
(WebKit::NetscapePluginInstanceProxy::LocalObjectMap::get):
Move inline functions to .cpp; also made the class Noncopyable.
2010-02-15 Alexey Proskuryakov <ap@apple.com>
Mac release build fix attempt.
* Plugins/Hosted/NetscapePluginInstanceProxy.h:
* Plugins/Hosted/NetscapePluginInstanceProxy.mm:
(WebKit::NetscapePluginInstanceProxy::LocalObjectMap::~LocalObjectMap):
Implement destructor in .cpp file, where necessary headers are already included.
2010-02-12 Alexey Proskuryakov <ap@apple.com>
Reviewed by Kevin Decker.
<rdar://problem/7130641> Browser objects identity is not preserved by Safari
Out of process part.
To avoid excessive IPC, plugin process doesn't send each NPObject release/retain call to
Safari. It only sends one when the last one is removed, and it can destroy the proxy
NPObject.
However, the browser may be sending the same object out to plug-in as a function call
argument at the same time - neither side can know what the other one is up to. The solution
is to make the "destroying object" call return a boolean result, making it possible for
the browser to make plugin host keep the proxy with zero refcount for a little longer.
* Plugins/Hosted/NetscapePluginHostProxy.mm:
(WKPCForgetBrowserObject): This function (that used to be named ReleaseObject) is only
called when plug-in releases all of its references, so renamed it. Its boolean result
is returned as call success or failure.
* Plugins/Hosted/NetscapePluginInstanceProxy.h:
(WebKit::NetscapePluginInstanceProxy::LocalObjectMap): Made the numeric ID to JSObject map
two-way.
* Plugins/Hosted/NetscapePluginInstanceProxy.mm:
(WebKit::NetscapePluginInstanceProxy::LocalObjectMap::idForObject): This method is tricky
in that it creates objects with refcount of 1, but doesn't increase refcount when returning
found objects. This extra count accounts for the "reference" kept by plugin process.
(WebKit::NetscapePluginInstanceProxy::LocalObjectMap::retain): Only retaining for the
duration of calls out to plug-in, which means that refcount is almost always equal to 1.
Note that we can't use "++" here, due to how std::pair works!
(WebKit::NetscapePluginInstanceProxy::LocalObjectMap::release): Ditto.
(WebKit::NetscapePluginInstanceProxy::LocalObjectMap::clear): Clear all references when
stopping plug-in.
(WebKit::NetscapePluginInstanceProxy::LocalObjectMap::forget): Like release(), but only
functional when recount is 1 (meaning that the object is not being sent out to plug-in at
the moment).
(WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy): Updated for other changes.
(WebKit::NetscapePluginInstanceProxy::cleanup): Ditto.
(WebKit::NetscapePluginInstanceProxy::getWindowNPObject): Ditto.
(WebKit::NetscapePluginInstanceProxy::getPluginElementNPObject): Ditto.
(WebKit::NetscapePluginInstanceProxy::forgetBrowserObjectID): Ditto.
(WebKit::NetscapePluginInstanceProxy::evaluate): Ditto.
(WebKit::NetscapePluginInstanceProxy::invoke): Ditto.
(WebKit::NetscapePluginInstanceProxy::invokeDefault): Ditto.
(WebKit::NetscapePluginInstanceProxy::construct): Ditto.
(WebKit::NetscapePluginInstanceProxy::getProperty): Ditto.
(WebKit::NetscapePluginInstanceProxy::setProperty): Ditto.
(WebKit::NetscapePluginInstanceProxy::removeProperty): Ditto.
(WebKit::NetscapePluginInstanceProxy::hasProperty): Ditto.
(WebKit::NetscapePluginInstanceProxy::hasMethod): Ditto.
(WebKit::NetscapePluginInstanceProxy::enumerate): Ditto.
(WebKit::NetscapePluginInstanceProxy::addValueToArray): Ditto.
(WebKit::NetscapePluginInstanceProxy::demarshalValueFromArray): Ditto.
(WebKit::NetscapePluginInstanceProxy::retainLocalObject): Helper for calling retain when
making calls out to plug-in. No-op for objects that aren't wrapped to be sent (i.e. for
objects wrapping ProxyInstance wrappers for plug-in objects being sent bak).
(WebKit::NetscapePluginInstanceProxy::releaseLocalObject): Ditto.
* Plugins/Hosted/ProxyInstance.mm:
(WebKit::ProxyInstance::invoke): Retain/release arguments during call.
(WebKit::ProxyInstance::setFieldValue): Ditto.
* Plugins/Hosted/WebKitPluginClient.defs: Renamed PCReleaseObject to PCForgetBrowserObject.
2010-02-12 Darin Adler <darin@apple.com>
Reviewed by Sam Weinig.
Removed unneeded custom implementation of isDescendantOf.
* Plugins/WebBaseNetscapePluginView.mm:
(-[WebBaseNetscapePluginView shouldClipOutPlugin]): Use the
-[NSView isDescendantOf:] method instead of our own method
named superviewsHaveSuperviews.
2010-02-12 Dan Bernstein <mitz@apple.com>
Reviewed by Darin Adler.
<rdar://problem/7615234> REGRESSION (r48586): Loading an HTML page causes
PDFKit to be loaded
* WebView/WebPDFDocumentExtras.h: Removed the category declaration and
addWebPDFDocumentExtras(). Declare allScriptsInPDFDocument().
* WebView/WebPDFDocumentExtras.mm:
(allScriptsInPDFDocument): Changed the -_web_allScripts method into this function.
* WebView/WebPDFRepresentation.mm: Removed +initialize.
(-[WebPDFRepresentation finishedLoadingWithDataSource:]): Use
allScriptsInPDFDocument() instead of -_web_allScripts.
2010-02-10 Geoffrey Garen <ggaren@apple.com>
Reviewed by Oliver Hunt.
Exported some new JavaScript heap introspection.
* Misc/WebCoreStatistics.h:
* Misc/WebCoreStatistics.mm:
(+[WebCoreStatistics javaScriptObjectTypeCounts]): Just like
javaScriptProtectedObjectTypeCounts, except this function enumerates all
live objects, not just protected objects.
2010-02-08 Maciej Stachowiak <mjs@apple.com>
Reviewed by Cameron Zwarich.
Restore ENABLE_RUBY flag so vendors can ship with Ruby disabled if they choose.
https://bugs.webkit.org/show_bug.cgi?id=34698
* Configurations/FeatureDefines.xcconfig:
2010-02-09 Alexey Proskuryakov <ap@apple.com>
Reviewed by Geoffrey Garen.
https://bugs.webkit.org/show_bug.cgi?id=34490
WebCore::ImageEventSender::dispatchPendingEvents() crashes in certain conditions
* ForwardingHeaders/wtf/ValueCheck.h: Added.
2010-02-10 Jesus Sanchez-Palencia <jesus.palencia@openbossa.org>
Reviewed by Kenneth Rohde Christiansen.
Support frameset flattening
https://bugs.webkit.org/show_bug.cgi?id=32717
Add support for enabling/disabling FrameSet Flattening on the Mac port.
* WebView/WebPreferenceKeysPrivate.h:
* WebView/WebPreferences.mm:
(+[WebPreferences initialize]):
(-[WebPreferences isFrameSetFlatteningEnabled]):
(-[WebPreferences setFrameSetFlatteningEnabled:]):
* WebView/WebPreferencesPrivate.h:
* WebView/WebView.mm:
(-[WebView _preferencesChangedNotification:]):
2010-02-09 Alexey Proskuryakov <ap@apple.com>
Reviewed by Anders Carlsson.
https://bugs.webkit.org/show_bug.cgi?id=34771
A stray mouse moved event is sent to plug-ins after mouse exit
* WebCoreSupport/WebFrameLoaderClient.mm: (NetscapePluginWidget::handleEvent): A mouseout
DOM event is dispatched while handling NSMouseMoved - but we shouldn't be sending a
mouse moved event to plug-ins at this point.
2010-02-09 Shinichiro Hamaji <hamaji@chromium.org>
Reviewed by Darin Adler.
Provide a way to get total number of pages to be printed
https://bugs.webkit.org/show_bug.cgi?id=34699
* Misc/WebCoreStatistics.h:
* Misc/WebCoreStatistics.mm:
(-[WebFrame numberOfPages:pageWidthInPixels:]):
2010-02-08 Alexey Proskuryakov <ap@apple.com>
Reviewed by Darin Adler.
https://bugs.webkit.org/show_bug.cgi?id=34727
Assertion crashes and freezes when plug-in property access results in an exception
* Plugins/Hosted/WebKitPluginClient.defs: Made PCSetProperty and PCRemoveProperty async.
A plug-in can call back whil processing this call (e.g. for NPN_SetException), so we need
to listen for messages while waiting for reply.
* Plugins/Hosted/NetscapePluginHostProxy.mm:
(WKPCEvaluate): If there is no instance proxy, return KERN_FAILURE. This improves consistency
between method implementations, and leaves us with one less IPC call to make in failure case
(returning false with KERN_SUCCESS and returning KERN_FAILURE looks the same from plugin
host code).
(WKPCInvoke): Ditto.
(WKPCInvokeDefault): Ditto.
(WKPCGetProperty): Ditto.
(WKPCSetProperty): Send a reply once done.
(WKPCRemoveProperty): Ditto.
(WKPCHasProperty): If there is no instance proxy, return KERN_FAILURE.
(WKPCHasMethod): Ditto.
(WKPCEnumerate): Ditto.
2010-02-08 Alexey Proskuryakov <ap@apple.com>
Reviewed by Anders Carlsson.
<rdar://problem/6530010> OOP: Support NPN_SetException
Tested by plugins/netscape-throw-exception.html (removed it from skipped list).
* Plugins/Hosted/NetscapePluginHostProxy.mm:
(WKPCSetException):
* Plugins/Hosted/NetscapePluginInstanceProxy.h:
* Plugins/Hosted/NetscapePluginInstanceProxy.mm:
(WebKit::globalExceptionString):
(WebKit::NetscapePluginInstanceProxy::setGlobalException):
(WebKit::NetscapePluginInstanceProxy::moveGlobalExceptionToExecState):
* Plugins/Hosted/ProxyInstance.mm:
(WebKit::ProxyInstance::invoke):
(WebKit::ProxyInstance::getPropertyNames):
(WebKit::ProxyInstance::fieldValue):
(WebKit::ProxyInstance::setFieldValue):
* Plugins/Hosted/WebKitPluginClient.defs:
Route exception string to a global that's checked after calling into plug-in (just like in
in-process case).
2010-02-05 Kevin Decker <kdecker@apple.com>
Reviewed by Mark Rowe.
https://bugs.webkit.org/show_bug.cgi?id=34661
<rdar://problem/7614067> REGRESSION (Safari 4.0-> Safari 4.0.4): NPP_SetWindow no longer sets a clipRect of (0,0,0,0) when it becomes hidden
* Plugins/Hosted/WebHostedNetscapePluginView.mm:
(-[WebHostedNetscapePluginView updateAndSetWindow]): When clipping out NPDrawingModelCoreAnimation plug-ins, provide a zero'd out clipRect.
* Plugins/WebBaseNetscapePluginView.h: Moved superviewsHaveSuperviews to the base class.
* Plugins/WebBaseNetscapePluginView.mm:
(-[WebBaseNetscapePluginView superviewsHaveSuperviews]): Added to the base class; extracted from WebNetscapePluginView.
(-[WebBaseNetscapePluginView shouldClipOutPlugin]): Added new method with code extracted from WebNetscapePluginView.
* Plugins/WebNetscapePluginView.mm:
(-[WebNetscapePluginView saveAndSetNewPortStateForUpdate:]): When clipping out NPDrawingModelCoreAnimation plug-ins, provide a zero'd out clipRect.
2010-02-04 Mark Rowe <mrowe@apple.com>
Rubber-stamped by Dan Bernstein.
Fix the ability to #include <WebKit/DOMFile.h>.
* MigrateHeaders.make: Mark DOMBlob.h as a public header since the already-public DOMFile.h depends on it.
2010-02-04 John Sullivan <sullivan@apple.com>
https://bugs.webkit.org/show_bug.cgi?id=34611
WebLocalizedString() could use an assertion that it is being called on the main thread
Reviewed by Tim Hatcher.
* Misc/WebLocalizableStrings.m: Removed.
* Misc/WebLocalizableStrings.mm: Copied from mac/Misc/WebLocalizableStrings.m.
Renamed to use .mm extension so it can include a C++ header.
(WebLocalizedString):
Added an assertion that this is being called on the main thread.
2010-02-04 Dan Bernstein <mitz@apple.com>
Reviewed by Simon Fraser.
REGRESSION (r53718): When scrolling a tall window by page, the overlap between pages is too big
https://bugs.webkit.org/show_bug.cgi?id=34371
* WebView/WebFrameView.mm:
(-[WebFrameView _verticalPageScrollDistance]): Use Scrollbar methods instead of
constants, and cap the scroll distance.
(-[WebFrameView initWithFrame:]): Use Scrollbar::pixelsPerLineStep() instead of
cScrollbarPixelsPerLineStep.
(-[WebFrameView _horizontalPageScrollDistance]):Use Scrollbar methods instead of
constants, and cap the scroll distance.
2010-02-01 Shinichiro Hamaji <hamaji@chromium.org>
Reviewed by Eric Seidel.
Provide a way to get page number with layoutTestController
https://bugs.webkit.org/show_bug.cgi?id=33840
* Misc/WebCoreStatistics.h:
* Misc/WebCoreStatistics.mm:
(-[WebFrame pageNumberForElement:element:pageWidth:]):
2010-01-29 Gavin Barraclough <barraclough@apple.com>
Reviewed by Sam Weinig + Oliver Hunt.
Bug 34346 - With JSC bindings, make processingUserGesture work with events in Isolated Worlds
Pass processeing user gensture flag to media play/pause methods.
* WebView/WebVideoFullscreenHUDWindowController.mm:
(-[WebVideoFullscreenHUDWindowController setPlaying:]):
2010-02-01 Dan Bernstein <mitz@apple.com>
Reviewed by Anders Carlsson.
<rdar://problem/7044385> Crash at NetscapePlugInStreamLoader::didReceiveResponse()
The crash was caused by having two streams with a streamID of 1.
* Plugins/Hosted/NetscapePluginInstanceProxy.mm:
(WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy): Fixed a typo. Now
correctly increments m_currentURLRequestID to account for the manual stream.
(WebKit::NetscapePluginInstanceProxy::disconnectStream): If the stream is the manual stream,
null it out instead of trying to remove it from the map. Added an assertion.
(WebKit::NetscapePluginInstanceProxy::loadRequest): Added an assertion.
== Rolled over to ChangeLog-2010-01-29 ==