Commit Graph

25094 Commits

Author SHA1 Message Date
rmcilroy
b5502099b7 [Interpreter] Add implementations of arithmetic binary op bytecodes.
Adds implementations and tests for the following bytecodes:
  - Add
  - Sub
  - Mul
  - Div
  - Mod

Also adds the Mod bytecode and adds support to BytecodeGenerator and
BytecodeArrayBuilder to enable it's use.

The current bytecodes always call through to the JS builtins. This also adds
LoadObjectField and CallJSBuiltin operators to the InterpreterAssembler.

BUG=v8:4280
LOG=N

Review URL: https://codereview.chromium.org/1300813005

Cr-Commit-Position: refs/heads/master@{#30352}
2015-08-25 11:31:20 +00:00
hablich
cfdcc874a9 Revert of Moving ArraySplice Builtin to ElementsAccessor (patchset #8 id:140001 of https://codereview.chromium.org/1293683005/ )
Reason for revert:
Fails layout tests: http://build.chromium.org/p/client.v8.fyi/builders/V8-Blink%20Linux%2032/builds/1450

Original issue's description:
> - remove the Backing-Store specific code from builtins.cc and put it in elements.cc.
> - adding tests to improve coverage of the splice method
>
> BUG=
>
> Committed: https://crrev.com/8533d4b5433d3a9e9fb1015f206997bd6d869fe3
> Cr-Commit-Position: refs/heads/master@{#30269}
>
> Committed: https://crrev.com/07a4a6cb8e2ab940b28a7151a925c796da023524
> Cr-Commit-Position: refs/heads/master@{#30326}

TBR=mvstanton@chromium.org,cbruni@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=

Review URL: https://codereview.chromium.org/1315823004

Cr-Commit-Position: refs/heads/master@{#30351}
2015-08-25 11:18:39 +00:00
cbruni
12ad2554fb Revert of Array.prototype.unshift builtin improvements (patchset #3 id:40001 of https://codereview.chromium.org/1311343002/ )
Reason for revert:
https://codereview.chromium.org/1315823004/

Original issue's description:
> Array.prototype.unshift builtin improvements
>
> Moving unshift to ElementAccessor and increasing the range of arguments
> handled directly in C++, namely directly supporting FastDoubleElementsKind.
> This should yield a factor 19 speedup for unshift on fast double arrays.
>
> BUG=
>
> Committed: https://crrev.com/bf6764e6c1197e50ae148755488307a423b1d9b4
> Cr-Commit-Position: refs/heads/master@{#30347}

TBR=yangguo@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=

Review URL: https://codereview.chromium.org/1311363003

Cr-Commit-Position: refs/heads/master@{#30350}
2015-08-25 11:11:30 +00:00
mlippautz
1507da8d28 [heap] Make the current GCCallbackFlags are part of {Heap}.
Moves the GCCallbackflags where they belong, i.e., {Heap}, and gets rid of
IncrementalMarking::Start() callsites.

BUG=

Review URL: https://codereview.chromium.org/1314853002

Cr-Commit-Position: refs/heads/master@{#30349}
2015-08-25 10:59:56 +00:00
titzer
e4bcc3363f Add a PLACEHOLDER code kind.
The PLACEHOLDER code kind is used when compiling a code object that has
direct calls to other code objects, but those other code objects do not
yet exist because they have not yet been compiled. It serves as a
placeholder to break the cycle, e.g. in WASM.

R=yangguo@chromium.org
BUG=

Review URL: https://codereview.chromium.org/1308393003

Cr-Commit-Position: refs/heads/master@{#30348}
2015-08-25 10:17:33 +00:00
cbruni
bf6764e6c1 Array.prototype.unshift builtin improvements
Moving unshift to ElementAccessor and increasing the range of arguments
handled directly in C++, namely directly supporting FastDoubleElementsKind.
This should yield a factor 19 speedup for unshift on fast double arrays.

BUG=

Review URL: https://codereview.chromium.org/1311343002

Cr-Commit-Position: refs/heads/master@{#30347}
2015-08-25 09:45:38 +00:00
rossberg
98b56f0da6 Reship arrow functions
...in canary.

This reverts commit c75af23299.

R=hablich@chromium.org
BUG=

Review URL: https://codereview.chromium.org/1319443002

Cr-Commit-Position: refs/heads/master@{#30346}
2015-08-25 09:23:11 +00:00
mlippautz
052a4cf135 [heap] Report proper GC type in prologue/eplilogue callbacks.
Followup to https://codereview.chromium.org/1288683005

BUG=chromium:521946
LOG=N

Review URL: https://codereview.chromium.org/1313023002

Cr-Commit-Position: refs/heads/master@{#30345}
2015-08-25 09:22:04 +00:00
mlippautz
e4d6f1dec1 [heap] Enforce coding style decl order in {Heap} round #2.
BUG=

Review URL: https://codereview.chromium.org/1313513003

Cr-Commit-Position: refs/heads/master@{#30344}
2015-08-25 08:24:13 +00:00
bmeurer
fef38c21e8 [crankshaft] DCE must not eliminate (observable) math operations.
The HUnaryMathOperation cannot be eliminated in general, because the
spec requires a ToNumber conversion on the input, which is observable
of course.

BUG=v8:4389
LOG=y

Review URL: https://codereview.chromium.org/1307413003

Cr-Commit-Position: refs/heads/master@{#30343}
2015-08-25 06:24:55 +00:00
bmeurer
5d875a57fa Correctify instanceof and make it optimizable.
The previous hack with HInstanceOfKnownGlobal was not only slower,
but also very brittle and required a lot of weird hacks to support it. And
what's even more important it wasn't even correct (because a map check
on the lhs is never enough for instanceof).

The new implementation provides a sane runtime implementation
for InstanceOf plus a fast case in the InstanceOfStub, combined with
a proper specialization in the case of a known global in CrankShaft,
which does only the prototype chain walk (coupled with a code
dependency on the known global).

As a drive-by-fix: Also fix the incorrect Object.prototype.isPrototypeOf
implementation.

BUG=v8:4376
LOG=y

Review URL: https://codereview.chromium.org/1304633002

Cr-Commit-Position: refs/heads/master@{#30342}
2015-08-25 04:48:54 +00:00
bbudge
2090c08d3e [simd.js] Set --harmony-simd flag in test config.
Adds the flag to the test configuration so we aren't just testing the
polyfill.
Fixes some number conversion in native fromFloat32x4 function that now
fails.

LOG=N
BUG=v8:4124

Review URL: https://codereview.chromium.org/1312703003

Cr-Commit-Position: refs/heads/master@{#30341}
2015-08-24 21:19:09 +00:00
littledan
45e2628df7 Add a separate scope for switch
The ES2015 specification for switch statements 13.12.11 specifies that
they get their own lexical scope. This patch introduces such a scope
through a complex desugaring in terms of blocks, done so that Crankshaft
does not have to be updated to support multiple constructs providing
scopes.

Recommitting this patch after a bug fix in Crankshaft to allow a
desugaring with certain elements missing a source location:
https://codereview.chromium.org/1313443002

BUG=v8:4377
LOG=Y
R=adamk

Review URL: https://codereview.chromium.org/1309163003

Cr-Commit-Position: refs/heads/master@{#30340}
2015-08-24 18:57:20 +00:00
domenic
5aeb748d37 Ship --harmony_array_includes
Intent to ship: https://groups.google.com/d/msg/v8-users/-a8_8cb6FRI/trjyB5bACQAJ

BUG=v8:3575
R=adamk@chromium.org, rossberg@chromium.org
LOG=Y
CQ_INCLUDE_TRYBOTS=tryserver.chromium.linux:linux_chromium_rel_ng;tryserver.blink:linux_blink_rel

Review URL: https://codereview.chromium.org/1295543003

Cr-Commit-Position: refs/heads/master@{#30339}
2015-08-24 18:16:13 +00:00
rossberg
ff932fe8f4 [es6] Fix default parameters in arrow functions
R=adamk@chromium.org, wingo@igalia.com
BUG=v8:811
LOG=N

Review URL: https://codereview.chromium.org/1314543005

Cr-Commit-Position: refs/heads/master@{#30338}
2015-08-24 18:01:05 +00:00
littledan
032a35ffb6 Translate AST to Hydrogen missing position
This patch translates RelocInfo::kNoPosition to SourcePosition::Unknown()
in constructing the Hydrogen graph from the parser's output. The translation
is done to increase the flexibility of the parser to desugar more things
that don't have natural locations.

R=bmeurer@chromium.org
BUG=v8:4377
LOG=N

Review URL: https://codereview.chromium.org/1313443002

Cr-Commit-Position: refs/heads/master@{#30337}
2015-08-24 17:18:54 +00:00
bradnelson
10f2c5c33a Adding visitors to regurgitate expression types or reset them.
Adding an AstExpressionVisitor to touch each expression node in
an AST.

Adding TypingReseter to clear the slate after a failed asm.js
validation that has set partial typing information.

Adding a ExpressionTypeCollector to walk the expressions
in an AST and emit them as a string for testing.

Adding tests of the above.

LOG=N
BUG= https://code.google.com/p/v8/issues/detail?id=4203
TEST=test-typing-reset,test-ast-expression-visitor
R=rossberg@chromium.org,titzer@chromium.org

Review URL: https://codereview.chromium.org/1288773007

Cr-Commit-Position: refs/heads/master@{#30336}
2015-08-24 17:16:49 +00:00
hpayer
f0e3d51840 Re-land "Concurrently unmap free pages."
BUG=chromium:507211
LOG=n

Review URL: https://codereview.chromium.org/1306183003

Cr-Commit-Position: refs/heads/master@{#30335}
2015-08-24 16:27:54 +00:00
mstarzinger
7fb31bdba4 Make Simulator respect C stack limits as well.
The simulator uses a separate JS stack, exhaustion of the C stack
however is not caught by JS limit checks. This change now lowers the
limit of the JS stack accordingly on function calls.

R=mvstanton@chromium.org
BUG=chromium:522380
TEST=mjsunit/regress/regress-crbug-522380
LOG=n

Review URL: https://codereview.chromium.org/1314623002

Cr-Commit-Position: refs/heads/master@{#30334}
2015-08-24 15:55:40 +00:00
mstarzinger
c9f3d892b2 Move StackGuard::InterruptRequested into StackLimitCheck.
R=yangguo@chromium.org

Review URL: https://codereview.chromium.org/1310253002

Cr-Commit-Position: refs/heads/master@{#30333}
2015-08-24 15:24:56 +00:00
rossberg
c75af23299 Unship arrow functions
...until the hotfix has baked.

R=hablich@chromium.org
BUG=v8:4211
LOG=Y

Review URL: https://codereview.chromium.org/1310243002

Cr-Commit-Position: refs/heads/master@{#30332}
2015-08-24 14:58:32 +00:00
yangguo
e642fde414 Deserializer: flush code cache while code pointers are still valid.
Omitting test case because it would be brittle and become useless soon.

R=mlippautz@chromium.org
BUG=chromium:523453
LOG=N

Review URL: https://codereview.chromium.org/1312763002

Cr-Commit-Position: refs/heads/master@{#30331}
2015-08-24 14:49:29 +00:00
yangguo
24544698ef Message formatting: handle unexpected case of failing property lookup.
R=cbruni@chromium.org
BUG=chromium:523308
LOG=N

Review URL: https://codereview.chromium.org/1314543004

Cr-Commit-Position: refs/heads/master@{#30330}
2015-08-24 13:40:27 +00:00
mlippautz
b06a6a891c Revert "Make sure that memory reducer makes progress in incremental marking"
This reverts commit 1345f811bf.

BUG=

Review URL: https://codereview.chromium.org/1303333005

Cr-Commit-Position: refs/heads/master@{#30329}
2015-08-24 13:29:39 +00:00
yangguo
e8ce7acf53 Debugger: use correct position for for-next expression statement.
R=rossberg@chromium.org
BUG=chromium:523543
LOG=N

Review URL: https://codereview.chromium.org/1310213002

Cr-Commit-Position: refs/heads/master@{#30328}
2015-08-24 13:08:22 +00:00
mlippautz
4095d60601 [heap] Enforce coding style decl order in {Heap} round #1.
Order is now:
 - forward declarations
 - enums
 - nested classes
 - static consts
 - constructors
 - static methods
 - regular methods
 - members fields

Bonus:
 - Allocate*() methods are grouped together
 - Sections

BUG=

Review URL: https://codereview.chromium.org/1312503004

Cr-Commit-Position: refs/heads/master@{#30327}
2015-08-24 12:50:48 +00:00
cbruni
07a4a6cb8e - remove the Backing-Store specific code from builtins.cc and put it in elements.cc.
- adding tests to improve coverage of the splice method

BUG=

Committed: https://crrev.com/8533d4b5433d3a9e9fb1015f206997bd6d869fe3
Cr-Commit-Position: refs/heads/master@{#30269}

Review URL: https://codereview.chromium.org/1293683005

Cr-Commit-Position: refs/heads/master@{#30326}
2015-08-24 10:55:13 +00:00
rmcilroy
bfdc22d7fc [Interpreter] Pass context to interpreter bytecode handlers and add LoadConstextSlot
Passes the current context to bytecode interpreter handlers. This is held in the
context register on all architectures except for ia32 where there are too few
registers and it is instead spilled to the stack.

Also changes Load/StoreRegister to use kMachAnyTagged representation since they
should only ever hold tagged values.

BUG=v8:4280
LOG=N

Review URL: https://codereview.chromium.org/1294133004

Cr-Commit-Position: refs/heads/master@{#30325}
2015-08-24 10:25:50 +00:00
rmcilroy
53ac9fe8f9 Add CompileInfo::GetDebugName()
Replaces all instances of the code which computed the debug
name of a stub or function with calls to CompileInfo::GetDebugName instead.

Also:
  - Removes useless parameter on CodeStub::GetMajorName
  - Removes FakeStubForTesting since it is no longer required
  - Adds CompileInfo::ShouldEnsureSpaceForLazyDeopt() to replace unclear calls to IsStub().

Review URL: https://codereview.chromium.org/1297203002

Cr-Commit-Position: refs/heads/master@{#30324}
2015-08-24 10:23:55 +00:00
hablich
86016622b4 Revert of [simd.js] Update to spec version 0.8.2. (patchset #11 id:200001 of https://codereview.chromium.org/1294513004/ )
Reason for revert:
Fails tests:
http://build.chromium.org/p/client.v8/builders/V8%20Linux%20-%20deadcode/builds/5073/steps/steps/logs/stdio

Original issue's description:
> [simd.js] Update to spec version 0.8.2.
>
> Adds Uint32x4, Uint16x8, and Uint8x16 types.
> Adds all functions in the current spec, except for loads and stores.
>
> LOG=Y
> BUG=v8:4124
>
> Committed: https://crrev.com/4be6d37fd1ad0a6e0ea37da8863ae5169c2b89ba
> Cr-Commit-Position: refs/heads/master@{#30322}

TBR=littledan@chromium.org,bbudge@google.com,bmeurer@chromium.org,hpayer@chromium.org,bbudge@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=v8:4124

Review URL: https://codereview.chromium.org/1309513005

Cr-Commit-Position: refs/heads/master@{#30323}
2015-08-24 10:06:43 +00:00
bbudge
4be6d37fd1 [simd.js] Update to spec version 0.8.2.
Adds Uint32x4, Uint16x8, and Uint8x16 types.
Adds all functions in the current spec, except for loads and stores.

LOG=Y
BUG=v8:4124

Review URL: https://codereview.chromium.org/1294513004

Cr-Commit-Position: refs/heads/master@{#30322}
2015-08-24 09:13:08 +00:00
chunyang.dai
9726db8199 X87: Disable test case for X87 because of double register number restriction.
These two test cases introduced by 8525136b require that the double register is >=2.
But currently on x87 turbofan implementation only 1 double register is supported.

BUG=

Review URL: https://codereview.chromium.org/1308763003

Cr-Commit-Position: refs/heads/master@{#30321}
2015-08-24 08:44:02 +00:00
mstarzinger
edc8980115 Simplify macro-assembler.h include dance.
R=bmeurer@chromium.org

Review URL: https://codereview.chromium.org/1306023002

Cr-Commit-Position: refs/heads/master@{#30320}
2015-08-24 07:52:17 +00:00
yangguo
38d46c0372 Native context: alpha sort slots and remove boilerplate.
R=mstarzinger@chromium.org

Review URL: https://codereview.chromium.org/1307963002

Cr-Commit-Position: refs/heads/master@{#30319}
2015-08-24 07:15:17 +00:00
yangguo
cc97e524a1 Revert of Parse arrow functions at proper precedence level (patchset #2 id:60001 of https://codereview.chromium.org/1286383005/ )
Reason for revert:
Breaks layout test. Please change test expectation on blink first.

--- /mnt/data/b/build/slave/V8-Blink_Linux_64/build/layout-test-results/inspector/sources/debugger-pause/debugger-pause-in-internal-expected.txt
+++ /mnt/data/b/build/slave/V8-Blink_Linux_64/build/layout-test-results/inspector/sources/debugger-pause/debugger-pause-in-internal-actual.txt
@@ -1,4 +1,4 @@
-CONSOLE ERROR: line 9: Uncaught SyntaxError: Expected () to start arrow function, but got '}' instead of '=>'
+CONSOLE ERROR: line 9: Uncaught SyntaxError: Unexpected token )
 Tests that pause on exception in internal script does not crash.

 Script source was shown.

Original issue's description:
> Parse arrow functions at proper precedence level
>
> BUG=v8:4211
> LOG=Y
> R=rossberg@chromium.org
>
> Committed: https://crrev.com/9271b0ccf9ddb217deb1f0b9ef9b59b64dc40214
> Cr-Commit-Position: refs/heads/master@{#30298}

TBR=rossberg@chromium.org,mstarzinger@chromium.org,fennyfanny655@gmail.com,machenbach@chromium.org,wingo@igalia.com
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=v8:4211

Review URL: https://codereview.chromium.org/1315503002

Cr-Commit-Position: refs/heads/master@{#30318}
2015-08-24 06:57:12 +00:00
mstarzinger
2911007240 Get rid of CompilationInfo::GenerateCodeStub method.
R=titzer@chromium.org

Review URL: https://codereview.chromium.org/1309883002

Cr-Commit-Position: refs/heads/master@{#30317}
2015-08-24 06:52:55 +00:00
littledan
31b8018029 Revert of Add a separate scope for switch (patchset #7 id:120001 of https://codereview.chromium.org/1293283002/ )
Reason for revert:
Breaks cctest/test-cpu-profiler/SourceLocation on nosnap

Original issue's description:
> Add a separate scope for switch
>
> The ES2015 specification for switch statements 13.12.11 specifies that
> they get their own lexical scope. This patch introduces such a scope
> through a complex desugaring in terms of blocks, done so that Crankshaft
> does not have to be updated to support multiple constructs providing
> scopes.
>
> BUG=v8:4377
> LOG=Y
> R=adamk
>
> Committed: https://crrev.com/9edbc1f21eb1050cabbe3b8bc9aebf89ada7ebd7
> Cr-Commit-Position: refs/heads/master@{#30314}

TBR=adamk@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=v8:4377

Review URL: https://codereview.chromium.org/1309043004

Cr-Commit-Position: refs/heads/master@{#30316}
2015-08-22 01:24:33 +00:00
littledan
9c79e69e6c Fix function scoping issue
The parser has special behavior with respect to the bindings
of inner functions in sloppy mode which are not at the top
level of scopes. This behavior should be turned off when the
--harmony-sloppy-function flag is set, as lexical scoping
rules are used instead. Previously, the incorrect flag
--harmony-sloppy was used, resulting in a crashing bug.

BUG=chromium:520029
LOG=Y
R=adamk

Review URL: https://codereview.chromium.org/1303033003

Cr-Commit-Position: refs/heads/master@{#30315}
2015-08-22 00:18:23 +00:00
littledan
9edbc1f21e Add a separate scope for switch
The ES2015 specification for switch statements 13.12.11 specifies that
they get their own lexical scope. This patch introduces such a scope
through a complex desugaring in terms of blocks, done so that Crankshaft
does not have to be updated to support multiple constructs providing
scopes.

BUG=v8:4377
LOG=Y
R=adamk

Review URL: https://codereview.chromium.org/1293283002

Cr-Commit-Position: refs/heads/master@{#30314}
2015-08-21 23:54:36 +00:00
bradnelson
233599fa70 Don't allocate AstTyper with the zone allocator.
While the class Type objects the AstTyper generates should be
allocated to zone memory, there's no particular reason
the typer object itself needs to be.

BUG=None
TEST=None
R=rossberg@chromium.org,titzer@chromium.org
LOG=N

Review URL: https://codereview.chromium.org/1303843003

Cr-Commit-Position: refs/heads/master@{#30313}
2015-08-21 18:15:41 +00:00
mstarzinger
cdff697b17 Rename FullCodeGenerator::function to literal.
R=titzer@chromium.org

Review URL: https://codereview.chromium.org/1310603002

Cr-Commit-Position: refs/heads/master@{#30312}
2015-08-21 16:43:00 +00:00
binji
b7cf73271d Signal a blocked futex if the isolate is interrupted; don't busy-wait
FutexEmulation::Wait can potentially block forever on a condition variable. We
want to allow this to be interrupted (for a debugger, or to terminate the
thread, for example).

The previous implementation would periodically wake up the waiter to check for
interrupts. This CL modifies the StackGuard so it wakes the blocked futex if
the thread should be interrupted.

BUG=chromium:497295
R=jarin@chromium.org
LOG=n

Review URL: https://codereview.chromium.org/1230303005

Cr-Commit-Position: refs/heads/master@{#30311}
2015-08-21 16:42:02 +00:00
vogelheim
218948e5f2 Revert of Concurrently unmap free pages. (patchset #4 id:60001 of https://codereview.chromium.org/1303263002/ )
Reason for revert:
Several tests on V8 Linux64 TSAN bot are broken, due to data races between allocation & GC.

A bisect points to this CL, and the CL description sounds pertinent to the observed breakage.

Original issue's description:
> Concurrently unmap free pages.
>
> BUG=
>
> Committed: https://crrev.com/d1aeb45d96123d47023066b244c0f450fbe57d2d
> Cr-Commit-Position: refs/heads/master@{#30306}

TBR=mlippautz@chromium.org,hpayer@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=

Review URL: https://codereview.chromium.org/1306213002

Cr-Commit-Position: refs/heads/master@{#30310}
2015-08-21 16:21:04 +00:00
mstarzinger
201706bc91 Deprecate useless CompilationInfo::IsOptimizable predicate.
R=titzer@chromium.org

Review URL: https://codereview.chromium.org/1309813002

Cr-Commit-Position: refs/heads/master@{#30309}
2015-08-21 15:21:23 +00:00
mstarzinger
ef2fd24e9f Deprecate semi-correct CompilationInfo::flags predicate.
R=titzer@chromium.org

Review URL: https://codereview.chromium.org/1304053004

Cr-Commit-Position: refs/heads/master@{#30308}
2015-08-21 15:10:55 +00:00
rmcilroy
843d5d5ca4 [turbofan] Add control and effect inputs to RawMachineAssembler calls.
Calls should have control and effect inputs, which were previously missing
for RawMachineAssembler call operations. Add control and effect edges to
graph()->start().

BUG=v8:4280
LOG=N

Review URL: https://codereview.chromium.org/1283193007

Cr-Commit-Position: refs/heads/master@{#30307}
2015-08-21 13:52:44 +00:00
hpayer
d1aeb45d96 Concurrently unmap free pages.
BUG=

Review URL: https://codereview.chromium.org/1303263002

Cr-Commit-Position: refs/heads/master@{#30306}
2015-08-21 13:25:12 +00:00
yangguo
1cdcae94c1 Small MessageLocation related refactoring.
R=cbruni@chromium.org

Review URL: https://codereview.chromium.org/1309673003

Cr-Commit-Position: refs/heads/master@{#30305}
2015-08-21 13:19:07 +00:00
mstarzinger
d6ef00b98f [heap] Move StoreBufferRebuilder into the correct header.
R=mlippautz@chromium.org

Review URL: https://codereview.chromium.org/1309733002

Cr-Commit-Position: refs/heads/master@{#30304}
2015-08-21 13:00:57 +00:00
mlippautz
23c30021f2 [heap] Disable moving object starts aka left trimming
BUG=

Review URL: https://codereview.chromium.org/1301963002

Cr-Commit-Position: refs/heads/master@{#30303}
2015-08-21 12:59:28 +00:00