Don't instantiate the Java plug-in if it's inactive
https://bugs.webkit.org/show_bug.cgi?id=101102
<rdar://problem/12595679>

Reviewed by Andreas Kling.

Source/WebKit/mac:

* WebCoreSupport/WebChromeClient.mm:
(WebChromeClient::shouldUnavailablePluginMessageBeButton):
The RenderEmbeddedObject::PluginInactive reason should always result in a button being shown.

(WebChromeClient::unavailablePluginButtonClicked):
If the Java plug-in is inactive, call WKJLReportWebComponentsUsed() to reactivate the plug-in and
then reload the page.

* WebCoreSupport/WebFrameLoaderClient.mm:
(isOracleJavaPlugIn):
(isPlugInInactive):
Helper functions.

(WebFrameLoaderClient::createPlugin):
If the plug-in is inactive, set the appropriate unavailability reason on the renderer.

Source/WebKit2:

* Shared/Plugins/PluginModuleInfo.h:
Add a PluginModuleLoadPolicy enum.

* UIProcess/Plugins/PluginInfoStore.cpp:
(WebKit::PluginInfoStore::policyForPlugin):
* UIProcess/Plugins/PluginInfoStore.h:
(PluginInfoStore):
Rename shouldBlockPlugin to policyForPlugin and make it return an enum so we can handle inactive plug-ins.

* UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
(WebKit::shouldBlockPlugin):
Add helper function.

(WebKit::PluginInfoStore::policyForPlugin):
If the Java plug-in is inactive, return PluginModuleInactive.

(WebKit::PluginInfoStore::reactivateInactivePlugin):
If the given plug-in is the Java plug-in, call WKJLReportWebComponentsUsed() to reactivate it.

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::unavailablePluginButtonClicked):
If the plug-in is inactive, try to reactivate it and reload the page if reactivation succeeded.

* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::getPluginPath):
* UIProcess/WebProcessProxy.h:
This now returns a plug-in load policy.

* UIProcess/WebProcessProxy.messages.in:
GetPluginPack now returns a load policy enum.

* WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::shouldUnavailablePluginMessageBeButton):
Change this to a switch statement and always return true for RenderEmbeddedObject::PluginInactive.

(WebKit::WebChromeClient::unavailablePluginButtonClicked):
Add RenderEmbeddedObject::PluginInactive to the assertion.

* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::createPlugin):
Update now that GetPluginPath returns a pluginLoadPolicy enum.

(WebKit::canPluginHandleResponse):
Ditto.

WebKitLibraries:

Update WebKitSystemInterface to a version that has WKJLReportWebComponentsUsed.

* WebKitSystemInterface.h:
* libWebKitSystemInterfaceLion.a:
* libWebKitSystemInterfaceMountainLion.a:
Roll WebKitSystemInterface DERPS.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@133371 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Replace NodeRareData hash map with a union on m_renderer
https://bugs.webkit.org/show_bug.cgi?id=100057

Patch by Elliott Sprehn <esprehn@chromium.org> on 2012-11-02
Reviewed by Eric Seidel.

Use a union on Node::m_renderer between NodeRareData* and RenderObject*. This removes
the overhead of accessing rare data and the memory from the map.

This is an 8% improvement on Bindings/get-elements-by-tag-name.html which tested
document.getElementsByTagName and was previously optimized in Bug 90059 for a 5%
improvement. As this is better than even the special casing for document that was
done in that bug, general node list access should see an even greater win.

This reduces the memory usage on nytimes.com by 250k per Bug 101052 by
removing the rare data map overhead.

This is also a 15% improvement on Parser/textarea-parsing.html

By removing the performance overhead of rareData() this patch addresses the performance
issues raised in Bugs 73853, 87034 and 89635.

I ran Parser/html5-full-render.html and there was no performance regression after
tuning Text::recalcTextStyle and the refactor that was done in r132684.

No new tests, this is just a refactor.

* dom/Document.cpp:
(WebCore::Document::Document):
* dom/Document.h:
(WebCore::Node::Node):
* dom/Element.cpp:
(WebCore::Element::elementRareData):
* dom/Node.cpp:
(WebCore::Node::rareData):
(WebCore::Node::ensureRareData):
(WebCore::Node::clearRareData):
(WebCore::Node::renderBox):
(WebCore::Node::renderBoxModelObject):
(WebCore::Node::reportMemoryUsage):
* dom/Node.h:
(NodeRareDataBase):
  Base class for NodeRareData that knows about the renderer so we can
  inline the accesses in Node.h
(WebCore::NodeRareDataBase::renderer):
(WebCore::NodeRareDataBase::setRenderer):
(WebCore::NodeRareDataBase::~NodeRareDataBase):
(WebCore::NodeRareDataBase::NodeRareDataBase):
(WebCore):
(WebCore::Node::renderer):
(WebCore::Node::setRenderer):
(Node):
* dom/NodeRareData.h:
* dom/NodeRenderStyle.h:
(WebCore::Node::renderStyle):
* dom/Text.cpp:
(WebCore::Text::recalcTextStyle):
  This method appears very hot in html5-full-render.html and accessing the
  renderer 4 times caused a 2% performance regression with this patch. I
  reduced it to 1 access and there's no longer any performance regression.
* dom/WebCoreMemoryInstrumentation.cpp:
  Removed tracking of the rare data map memory usage as there is no longer
  a map to track.
* dom/WebCoreMemoryInstrumentation.h:
* inspector/InspectorMemoryAgent.cpp:
(WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@133372 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Add support to -webkit-line-break property for CSS3 Text line-break property values and semantics.
https://bugs.webkit.org/show_bug.cgi?id=89235

Patch by Glenn Adams <glenn@skynav.com> on 2012-11-02
Reviewed by Eric Seidel.

See also wiki documentation at:
[1] http://trac.webkit.org/wiki/LineBreaking
[2] http://trac.webkit.org/wiki/LineBreakingCSS3Mapping

Source/WebCore:

Web exposed changes include:
(1) The default (initial) value for -webkit-line-break becomes 'auto', instead of 'normal';
(2) The values 'auto', 'loose', 'normal', and 'strict' are added to -webkit-line-break;
(3) See [2] above for details regarding interpretation.

Tests: css3/line-break/line-break-auto-centered.html
       css3/line-break/line-break-auto-half-kana.html
       css3/line-break/line-break-auto-hyphens.html
       css3/line-break/line-break-auto-inseparables.html
       css3/line-break/line-break-auto-iteration-marks.html
       css3/line-break/line-break-auto-postfixes.html
       css3/line-break/line-break-auto-prefixes.html
       css3/line-break/line-break-auto-sound-marks.html
       css3/line-break/line-break-loose-centered.html
       css3/line-break/line-break-loose-half-kana.html
       css3/line-break/line-break-loose-hyphens.html
       css3/line-break/line-break-loose-inseparables.html
       css3/line-break/line-break-loose-iteration-marks.html
       css3/line-break/line-break-loose-postfixes.html
       css3/line-break/line-break-loose-prefixes.html
       css3/line-break/line-break-loose-sound-marks.html
       css3/line-break/line-break-normal-centered.html
       css3/line-break/line-break-normal-half-kana.html
       css3/line-break/line-break-normal-hyphens.html
       css3/line-break/line-break-normal-inseparables.html
       css3/line-break/line-break-normal-iteration-marks.html
       css3/line-break/line-break-normal-postfixes.html
       css3/line-break/line-break-normal-prefixes.html
       css3/line-break/line-break-normal-sound-marks.html
       css3/line-break/line-break-strict-centered.html
       css3/line-break/line-break-strict-half-kana.html
       css3/line-break/line-break-strict-hyphens.html
       css3/line-break/line-break-strict-inseparables.html
       css3/line-break/line-break-strict-iteration-marks.html
       css3/line-break/line-break-strict-postfixes.html
       css3/line-break/line-break-strict-prefixes.html
       css3/line-break/line-break-strict-sound-marks.html

* platform/text/LineBreakIteratorPoolICU.h:
(WebCore::LineBreakIteratorPool::makeLocaleWithBreakKeyword):
Add static function to construct ICU locale argument (also used as pool key) with additional
break keyword.
(WebCore::LineBreakIteratorPool::take):
(WebCore::LineBreakIteratorPool::put):
(LineBreakIteratorPool):
Remove direct dependency from ICU library (and types), moving that dependency into
new {open,close}LineBreakIterator() functions (defined in TextBreakIteratorICU.cpp).
Update to take line break mode into account.
Create (and cache) different break iterators depending on line break mode (in addition to locale),
which entails expanding pool entry key format to optionally append "@break=" +
"loose"|"normal"|"strict" keyword to locale string.

* platform/text/TextBreakIterator.h:
(WebCore::LazyLineBreakIterator::LazyLineBreakIterator):
(WebCore::LazyLineBreakIterator::isLooseCJKMode):
(WebCore::LazyLineBreakIterator::get):
(WebCore::LazyLineBreakIterator::reset):
(LazyLineBreakIterator):
Define LineBreakIteratorMode enumeration for use in TextBreakIterator et al.
Add state member to indicate line break mode.

* platform/text/TextBreakIteratorICU.cpp:
(WebCore::acquireLineBreakIterator):
Use new line break mode when making iterator from pool.
Handle change of return type of LineBreakIteratorPool::take() to non-ICU type,
i.e., TextBreakIterator* instead of ICU's UBreakIterator*.
(WebCore::releaseLineBreakIterator):
Handle change of parameter type of LineBreakIteratorPool::put() to non-ICU type,
i.e., TextBreakIterator* instead of ICU's UBreakIterator*.
(WebCore::isCJKLocale):
New functions for determining if CJK rules apply.
(WebCore::openLineBreakIterator):
New function for abstracting opening of ICU style line break iterator. This is now
used in LineBreakIteratorPoolICU.h rather than having direct ICU API dependency there.
This function also takes into account the line break mode.
(WebCore::closeLineBreakIterator):
(WebCore::mapLineIteratorModeToRules):
New function for abstracting closing of ICU style line break iterator. This is now
used in LineBreakIteratorPoolICU.h rather than having direct ICU API dependency there.

* rendering/RenderBlockLineLayout.cpp:
(WebCore::RenderBlock::LineBreaker::nextLineBreak):
Pass line break iterator mode flag when reseting LazyLineBreakIterator.
Add looseMode local variable to prevent need for computing under isBreakable().

* rendering/RenderText.cpp:
(WebCore::mapLineBreakToIteratorMode):
Add implementation for mapLineBreakToIteratorMode(), used by both RenderText::computePreferredLogicalWidths
and RenderBlock::LineBreaker::nextLineBreak.
(WebCore::RenderText::computePreferredLogicalWidths):
Ensure (lazy line) breakIterator is initialized for line break mode.
Ensure isBreakable() is passed loose mode flag to match behavior in RenderBlock::LineBreaker::nextLineBreak.

* rendering/RenderText.h:
(WebCore):
Add declaration for mapLineBreakToIteratorMode(), used by both RenderText::computePreferredLogicalWidths
and RenderBlock::LineBreaker::nextLineBreak.

* rendering/break_lines.cpp:
(WebCore):
Introduce two (local) enums NBSPBehavior and LooseBehavior for expanding template on nextBreakablePosition
to include loose mode parameter.
(WebCore::isBreakableSpace):
Add externally specified loose mode parameter to prevent need to invoke line break iterator
accessor method on each invocation. Use new loose mode flavors off NBP functions.
(WebCore::needsLineBreakIterator):
Introduce loose mode behavior template parameter to optimize loose mode behavior code path in order
to prevent regression to non loose mode path.
(WebCore::nextBreakablePosition):
(WebCore::nextBreakablePositionIgnoringNBSP):
Use new template parameter enums described above.
(WebCore::nextBreakablePositionIgnoringNBSPLoose):
(WebCore::nextBreakablePositionLoose):
Introduce two additional 'loose' mode flavors of NBP template expansions.

* rendering/break_lines.h:
(WebCore):
(WebCore::isBreakable):
Add externally specified loose mode parameter to prevent need to invoke line break iterator
accessor method on each invocation.

LayoutTests:

* css3/line-break/line-break-auto-centered-expected.html: Added.
* css3/line-break/line-break-auto-centered.html: Added.
* css3/line-break/line-break-auto-half-kana-expected.html: Added.
* css3/line-break/line-break-auto-half-kana.html: Added.
* css3/line-break/line-break-auto-hyphens-expected.html: Added.
* css3/line-break/line-break-auto-hyphens.html: Added.
* css3/line-break/line-break-auto-inseparables-expected.html: Added.
* css3/line-break/line-break-auto-inseparables.html: Added.
* css3/line-break/line-break-auto-iteration-marks-expected.html: Added.
* css3/line-break/line-break-auto-iteration-marks.html: Added.
* css3/line-break/line-break-auto-postfixes-expected.html: Added.
* css3/line-break/line-break-auto-postfixes.html: Added.
* css3/line-break/line-break-auto-prefixes-expected.html: Added.
* css3/line-break/line-break-auto-prefixes.html: Added.
* css3/line-break/line-break-auto-sound-marks-expected.html: Added.
* css3/line-break/line-break-auto-sound-marks.html: Added.
* css3/line-break/line-break-loose-centered-expected.html: Added.
* css3/line-break/line-break-loose-centered.html: Added.
* css3/line-break/line-break-loose-half-kana-expected.html: Added.
* css3/line-break/line-break-loose-half-kana.html: Added.
* css3/line-break/line-break-loose-hyphens-expected.html: Added.
* css3/line-break/line-break-loose-hyphens.html: Added.
* css3/line-break/line-break-loose-inseparables-expected.html: Added.
* css3/line-break/line-break-loose-inseparables.html: Added.
* css3/line-break/line-break-loose-iteration-marks-expected.html: Added.
* css3/line-break/line-break-loose-iteration-marks.html: Added.
* css3/line-break/line-break-loose-postfixes-expected.html: Added.
* css3/line-break/line-break-loose-postfixes.html: Added.
* css3/line-break/line-break-loose-prefixes-expected.html: Added.
* css3/line-break/line-break-loose-prefixes.html: Added.
* css3/line-break/line-break-loose-sound-marks-expected.html: Added.
* css3/line-break/line-break-loose-sound-marks.html: Added.
* css3/line-break/line-break-normal-centered-expected.html: Added.
* css3/line-break/line-break-normal-centered.html: Added.
* css3/line-break/line-break-normal-half-kana-expected.html: Added.
* css3/line-break/line-break-normal-half-kana.html: Added.
* css3/line-break/line-break-normal-hyphens-expected.html: Added.
* css3/line-break/line-break-normal-hyphens.html: Added.
* css3/line-break/line-break-normal-inseparables-expected.html: Added.
* css3/line-break/line-break-normal-inseparables.html: Added.
* css3/line-break/line-break-normal-iteration-marks-expected.html: Added.
* css3/line-break/line-break-normal-iteration-marks.html: Added.
* css3/line-break/line-break-normal-postfixes-expected.html: Added.
* css3/line-break/line-break-normal-postfixes.html: Added.
* css3/line-break/line-break-normal-prefixes-expected.html: Added.
* css3/line-break/line-break-normal-prefixes.html: Added.
* css3/line-break/line-break-normal-sound-marks-expected.html: Added.
* css3/line-break/line-break-normal-sound-marks.html: Added.
* css3/line-break/line-break-strict-centered-expected.html: Added.
* css3/line-break/line-break-strict-centered.html: Added.
* css3/line-break/line-break-strict-half-kana-expected.html: Added.
* css3/line-break/line-break-strict-half-kana.html: Added.
* css3/line-break/line-break-strict-hyphens-expected.html: Added.
* css3/line-break/line-break-strict-hyphens.html: Added.
* css3/line-break/line-break-strict-inseparables-expected.html: Added.
* css3/line-break/line-break-strict-inseparables.html: Added.
* css3/line-break/line-break-strict-iteration-marks-expected.html: Added.
* css3/line-break/line-break-strict-iteration-marks.html: Added.
* css3/line-break/line-break-strict-postfixes-expected.html: Added.
* css3/line-break/line-break-strict-postfixes.html: Added.
* css3/line-break/line-break-strict-prefixes-expected.html: Added.
* css3/line-break/line-break-strict-prefixes.html: Added.
* css3/line-break/line-break-strict-sound-marks-expected.html: Added.
* css3/line-break/line-break-strict-sound-marks.html: Added.
* platform/chromium-linux/css3/line-break/line-break-auto-half-kana-expected.html: Added.
* platform/chromium-linux/css3/line-break/line-break-auto-sound-marks-expected.html: Added.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@133375 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Crash calling is8Bit() in visitedLinkHash()
https://bugs.webkit.org/show_bug.cgi?id=101119

Reviewed by Filip Pizlo.

Added an isEmpty() check to AttributeURL and KURL.

* platform/LinkHash.cpp:
(WebCore::visitedLinkHash):


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@133377 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Very speculative ArgumentDecoder crash fix
https://bugs.webkit.org/show_bug.cgi?id=101130
<rdar://problem/11917046>

Reviewed by Sam Weinig.

Switch from fastMalloc/fastFree to system malloc/free in the hopes that it'll give more information about
a crash inside TCMalloc when freeing the argument data. (It seems unlikely that this is a bug in TCMalloc, but
switching to the system malloc could potentially give better error reporting).

* Platform/CoreIPC/ArgumentDecoder.cpp:
(CoreIPC::ArgumentDecoder::~ArgumentDecoder):
(CoreIPC::ArgumentDecoder::initialize):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@133379 268f45cc-cd09-0410-ab3c-d52691b4dbfc