summaryrefslogtreecommitdiffstats
path: root/net
Commit message (Collapse)AuthorAgeFilesLines
* Re-enable ConcurrencyTestdavidben@chromium.org2010-06-302-3/+2
| | | | | | | | | | | | | We disable it under Valgrind because it takes a while. The Chrome OS crash was resolved in r51091. R=agl BUG=37289,47587 TEST=KeygenHandler.ConcurrencyTest Review URL: http://codereview.chromium.org/2819029 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51197 0039d316-1c4b-4281-b951-d872f2087c98
* Don't run ClientSocketPoolBaseTest.CancelPendingSocketAtSocketLimit under ↵timurrrr@chromium.org2010-06-291-0/+3
| | | | | | | | | | TSan/Win TBR=glider BUG=47836 Review URL: http://codereview.chromium.org/2876015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51118 0039d316-1c4b-4281-b951-d872f2087c98
* Add Spdy support in WebSocketHandshake*Handlerukai@chromium.org2010-06-293-14/+259
| | | | | | | | | BUG=none TEST=none Review URL: http://codereview.chromium.org/2743003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51109 0039d316-1c4b-4281-b951-d872f2087c98
* Ignore OnConnected event if the job state is already CLOSED.ukai@chromium.org2010-06-291-0/+2
| | | | | | | | | | | There is a case while SocketStream is connecting, WebSocketJob is closed and SocketStream notifies it is connected. In this case, we should just ignore OnConnected event. BUG=47818 TEST=websocket/tests/url-with-credential.html Review URL: http://codereview.chromium.org/2823034 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51108 0039d316-1c4b-4281-b951-d872f2087c98
* Cleanup svn:executable prop from r51049.thestig@chromium.org2010-06-291-0/+0
| | | | | | | | BUG=none TEST=none Review URL: http://codereview.chromium.org/2845029 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51082 0039d316-1c4b-4281-b951-d872f2087c98
* We basically don't do late socket binding when a connect has alreadymbelshe@chromium.org2010-06-294-309/+389
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | been started for a request, even if another socket frees up earlier. The reassignment logic was quite complicated, so I reworked it. Fixing this bug was easy by changing the way FindTopStalledGroup worked, but because that function is called in that loop, changing this case caused the loop to go infinitely in some cases. This led me to look into unwinding the loop. The problem really came down to ReleaseSocket/DoReleaseSocket. Because we allow for a pending queue of released sockets, we had to do this looping (which has been a source of bugs before). To fix, I eliminated the pending_releases queue. I also reworked the routes through OnAvailableSocketSlot to unify them and always run asynchronously. The result is that now we no longer have the loop. So when one socket is released, we hand out exactly one socket. Note also that this logic slightly changes the priority of how we recycle sockets. Previously, we always consulted the TopStalledGroup. The TopStalledGroup is really only interesting in the case where we're at our max global socket limit, which is rarely the case. In the new logic, when a socket is released, first priority goes to any pending socket in the same group, regardless of that group's priority. The reason is - why close a socket we already have open? Previously, if the released socket's group was not the highest priority group, the socket would be marked idle, then closed (to make space for a socket to the TopStalledGroup), and finally a new socket created. I believe the new algorithm, while not perfectly matching the priorities, is more efficient (less churn on sockets), and also is more graceful to the common case. Finally OnAvailableSocketSlot does two things. First, it tries to "give" the now available slot to a particular group, which is dependent on how OnAvailableSocketSlot was called. If we're currently stalled on max sockets, it will also check (after giving the socket out) to see if we can somehow free something up to satisfy a stalled group. If that second step fails for whatever reason, we don't loop. In theory, this could mean that we go under the socket max and didn't dish out some sockets right away. To make sure that multiple stalled groups can get unblocked, we'll record the number of stalled groups, and once in this mode, OnAvailableSocketSlot will keep checking for stalled groups until the count finally drops to zero. BUG=47375 TEST=DelayedSocketBindingWaitingForConnect,CancelStalledSocketAtSocketLimit Review URL: http://codereview.chromium.org/2861023 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51081 0039d316-1c4b-4281-b951-d872f2087c98
* Refactors SPDY frame construction methods out ofmlloyd@chromium.org2010-06-285-504/+602
| | | | | | | | | | | | | | | | spdy_network_transaction_unittest.cc to promote code reuse. Removes the kGetSyn and kGetSynReply binary SPDY frame constants and replaces them with calls to factory methods, for better clarity and to reduce maintenance costs going forward. Also adds some helper methods for constructing mock reads and writes from SpdyFrames. TEST=net_unittests pass. BUG=None Review URL: http://codereview.chromium.org/2881001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51049 0039d316-1c4b-4281-b951-d872f2087c98
* Revert "Streams send a Rst frame upon being closed by client. Some minor ↵oshima@chromium.org2010-06-288-267/+42
| | | | | | | | | | | | editorial fixes." This reverts commit 699468c59a6563db5fb3fb4739c6710a279a4067. TBR=erikchen@google.com Review URL: http://codereview.chromium.org/2852029 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51011 0039d316-1c4b-4281-b951-d872f2087c98
* Streams send a Rst frame upon being closed by client. Some minor editorial ↵erikchen@google.com2010-06-288-42/+267
| | | | | | | | | | | fixes. TEST=net_unittests BUG=46589 Review URL: http://codereview.chromium.org/2804008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51007 0039d316-1c4b-4281-b951-d872f2087c98
* Hooking GSSAPI code into HTTP authenticate Negotiate handler.ahendrickson@google.com2010-06-2811-216/+717
| | | | | | | | | BUG=33033. TEST=None. Review URL: http://codereview.chromium.org/2684001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51001 0039d316-1c4b-4281-b951-d872f2087c98
* SPDY: Make sure we don't try to send https/wss over an unauthenticated, but ↵willchan@chromium.org2010-06-288-45/+109
| | | | | | | | | | encrypted SSL socket. BUG=46924 Review URL: http://codereview.chromium.org/2805039 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50997 0039d316-1c4b-4281-b951-d872f2087c98
* Cache the peer's intermediate CA certificates in session ID, so thatwtc@chromium.org2010-06-283-0/+45
| | | | | | | | | | | | | | they're available when we resume a session. Right now when we resume a session, only the server certificate is available, so we may have an incomplete certificate chain. TBR=agl BUG=47181 TEST=no "certificate not trusted" error on the Mac after using Chrome for a long time. Review URL: http://codereview.chromium.org/2855025 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50960 0039d316-1c4b-4281-b951-d872f2087c98
* Make X509Certificate::CreateFromHandle() copy the OSCertHandle, rather than ↵rsleevi@chromium.org2010-06-269-30/+41
| | | | | | | | | | | | assume ownership R=wtc BUG=47463 TEST=none Review URL: http://codereview.chromium.org/2867026 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50938 0039d316-1c4b-4281-b951-d872f2087c98
* Fix a renderer crash while processing FTP directory listing.phajdan.jr@chromium.org2010-06-264-1/+3
| | | | | | | | | | | | | | | | | The problem was caused by a broken assumption about current_parser_. After adding OnEndOfInput to FtpDirectoryListingParser interface, it was possible that during processing of input we ended up with just one parser, which returned error when OnEndOfInput was called. In that case, we should just reset current_parser_ to NULL to avoid a use-after-free error. TEST=net_unittests BUG=47528 Review URL: http://codereview.chromium.org/2846037 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50930 0039d316-1c4b-4281-b951-d872f2087c98
* Add field trial stats for alternate_protocol. The histogram we collected are: lzheng@chromium.org2010-06-265-10/+31
| | | | | | | | | | | | | | | | | | | | | http stats when alternate protocol is available but npn was not negotiated ( which means not usng spdy), and when alternate is available AND spdy is used. Noticable changes: 1. In http_network_transaction.cc, changed the logic that always parse response from server for alternate protocol and remember that in HttpAlternateProtocols strucuture. We need to remember this to collect stats for servers with alternate protocol support but used http for. 2. In spdy_stream.cc, get rid of the response copy from spdy_stream. This copy overwrites some early status in response set in http_network_transaction. TEST=http_network_transaction_unittest.cc BUG=46689 Review URL: http://codereview.chromium.org/2808010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50927 0039d316-1c4b-4281-b951-d872f2087c98
* Disable concurrency test added in r50903davidben@chromium.org2010-06-261-1/+3
| | | | | | | | | | | | It fails on ChromeOS. TBR=wtc BUG=47587 TEST=KeygenHandlerTest.ConcurrencyTest Review URL: http://codereview.chromium.org/2880003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50915 0039d316-1c4b-4281-b951-d872f2087c98
* Add virtual to some base classes that have virtual methodsjar@chromium.org2010-06-253-2/+7
| | | | | | | | | | This is defensive coding to avoid memory leaks. bug=47469 r=wtc Review URL: http://codereview.chromium.org/2869024 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50907 0039d316-1c4b-4281-b951-d872f2087c98
* Add a unit test to check KeygenHandler's thread-safetydavidben@chromium.org2010-06-254-16/+101
| | | | | | | | | | | | We'll want some semblance of thread-safety when we make keygen asynchronous. R=wtc,mattm BUG=148 TEST=unit test Review URL: http://codereview.chromium.org/2838010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50903 0039d316-1c4b-4281-b951-d872f2087c98
* ChromeOS compile fix, attempt 2.pkasting@chromium.org2010-06-251-2/+2
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50901 0039d316-1c4b-4281-b951-d872f2087c98
* Try to fix ChromeOS compile.pkasting@chromium.org2010-06-251-1/+1
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50899 0039d316-1c4b-4281-b951-d872f2087c98
* Massively simplify the NetworkChangeNotifier infrastructure:pkasting@chromium.org2010-06-2549-826/+511
| | | | | | | | | | | | | | * Use a process-wide object (singleton pattern) * Create/destroy this object on the main thread, make it outlive all consumers * Make observer-related functions threadsafe As a result, the notifier can now be used by any thread (eliminating things like NetworkChangeObserverProxy and NetworkChangeNotifierProxy, and expanding its usefulness); its creation and inner workings are much simplified (eliminating implementation-specific classes); and it is simpler to access (eliminating things like NetworkChangeNotifierThread and a LOT of passing pointers around). BUG=none TEST=Unittests; network changes still trigger notifications Review URL: http://codereview.chromium.org/2802015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50895 0039d316-1c4b-4281-b951-d872f2087c98
* Cleanup: Remove svn:executable from a bunch of files.thestig@chromium.org2010-06-256-0/+0
| | | | | | | | BUG=none TEST=checkperms.py passes Review URL: http://codereview.chromium.org/2850030 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50887 0039d316-1c4b-4281-b951-d872f2087c98
* X509CertificateTest.IntermediateCertificates leaks several native ↵rsleevi@chromium.org2010-06-241-24/+29
| | | | | | | | | | | | certificate handles during the execution of the test. R=wtc BUG=none TEST=X509CertificateTest.IntermediateCertificates Review URL: http://codereview.chromium.org/2809024 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50781 0039d316-1c4b-4281-b951-d872f2087c98
* Ignore duplicate SYN_REPLYs on the same stream. Added a unit test.mlloyd@chromium.org2010-06-244-4/+66
| | | | | | | | | BUG=45639 TEST=Added unit test, which caused an ASSERT fail before but now passes. Review URL: http://codereview.chromium.org/2871015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50751 0039d316-1c4b-4281-b951-d872f2087c98
* Don't close the socket in the HttpNetworkTransactionmlloyd@chromium.org2010-06-242-3/+67
| | | | | | | | | | | | | | destructor if we can and should keep the connection alive. This is necessary because in some situations, DoReadBodyComplete never gets called; this can happen, for example, when the response body length is zero, and the caller would be the cache transaction. BUG=47191 TEST=Added unit test. Existing net_unittests pass. Review URL: http://codereview.chromium.org/2807014 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50740 0039d316-1c4b-4281-b951-d872f2087c98
* Fixed bug where streams do not shutdown properly after the user callback ↵erikchen@google.com2010-06-2413-445/+680
| | | | | | | | | | | | | | | | | | | deletes the stream. Added a unit test. TEST=net_unittests BUG=46925 Merge branch 'trunk' of http://src.chromium.org/git/chromium into ukai_delegate_fix Revert "Revert 50215 because of crashes - Refactor SpdyStream to get HTTP specific out of the interface and members." This reverts commit 8f9bf3b9ba6663aeef7fbdab3edf16aeaa510f84. Review URL: http://codereview.chromium.org/2810022 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50739 0039d316-1c4b-4281-b951-d872f2087c98
* Http Cache: Avoid re-validation of sparse entries if arvargas@google.com2010-06-242-13/+107
| | | | | | | | | | | | | regular freshness test for the entry allows us to just fetch it from the cache. BUG=42901 TEST=unittests, html5 video tests work as intended. Review URL: http://codereview.chromium.org/2844020 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50738 0039d316-1c4b-4281-b951-d872f2087c98
* Time cache lock waitsgavinp@google.com2010-06-242-0/+7
| | | | | | | | | | | | | Chrome has a limitation that exclusive writers block all other readers or writers from accessing the cache. This CL creates an histogram so that I can track if this is actually a performance hit as prefetch starts arriving in the tree. BUG=none TEST=about:histograms Review URL: http://codereview.chromium.org/2831026 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50731 0039d316-1c4b-4281-b951-d872f2087c98
* Create HttpAuthController. (again)vandebo@chromium.org2010-06-248-409/+538
| | | | | | | | | | | | This packages up the auth state into a single class to enable a HttpProxyClientSocket class (which is needed for SSLClientSocketPool). Fix memory leak. BUG=30357 TEST=existing unit tests Review URL: http://codereview.chromium.org/2808020 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50696 0039d316-1c4b-4281-b951-d872f2087c98
* Change Windows' application/x-x509-user-cert handling to allow any ↵rsleevi@chromium.org2010-06-249-319/+3
| | | | | | | | | | | | certificate that has a private key, regardless of where it was generated, rather than restricting it to keys generated via <keygen> in the current browsing session. BUG=148 TEST=None R=wtc Review URL: http://codereview.chromium.org/2874002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50695 0039d316-1c4b-4281-b951-d872f2087c98
* Windows and NSS implementations allow for any certificate, while the Mac ↵rsleevi@chromium.org2010-06-241-2/+0
| | | | | | | | | | | implementation currenly constrains to certificates flagged for client authentication. The behaviour on other browsers is to allow any certificate for which the user has a private key, regardless of usage constraints, when handling application/x-x509-user-cert. BUG=148 TEST=none Review URL: http://codereview.chromium.org/2843015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50691 0039d316-1c4b-4281-b951-d872f2087c98
* Fix crash in GetSpdySessionFromSSLSocket in the case where thembelshe@chromium.org2010-06-246-19/+84
| | | | | | | | | | server immediately hangs up after negotiating SPDY via NPN. BUG=46369 TEST=SpdyNPNServerHangup Review URL: http://codereview.chromium.org/2862027 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50689 0039d316-1c4b-4281-b951-d872f2087c98
* Don't need to copy the challenge data before calling DER_Encode becausewtc@chromium.org2010-06-242-10/+8
| | | | | | | | | | | DER_Encode will copy it. Document the GenKeyAndSignChallenge function. R=mattm,davidben BUG=148 TEST=none Review URL: http://codereview.chromium.org/2866011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50682 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 50647 - Create HttpAuthController.vandebo@chromium.org2010-06-238-539/+409
| | | | | | | | | | | | | | | | 'Memory tests' is not happy. This packages up the auth state into a single class to enable a HttpProxyClientSocket class (which is needed for SSLClientSocketPool). BUG=30357 TEST=existing unit tests Review URL: http://codereview.chromium.org/2808020 TBR=vandebo@chromium.org Review URL: http://codereview.chromium.org/2866018 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50669 0039d316-1c4b-4281-b951-d872f2087c98
* Add a locked version of CryptAcquireContextdavidben@chromium.org2010-06-231-4/+7
| | | | | | | | | | | | The function is not thread-safe when called with certain flags. This will be useful when we move keygen onto a worker thread. BUG=none TEST=KeygenHandlerTest.SmokeTest (existing) Review URL: http://codereview.chromium.org/2828019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50661 0039d316-1c4b-4281-b951-d872f2087c98
* Create HttpAuthController.vandebo@chromium.org2010-06-238-409/+539
| | | | | | | | | | | This packages up the auth state into a single class to enable a HttpProxyClientSocket class (which is needed for SSLClientSocketPool). BUG=30357 TEST=existing unit tests Review URL: http://codereview.chromium.org/2808020 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50647 0039d316-1c4b-4281-b951-d872f2087c98
* Remove some unused code.eroman@chromium.org2010-06-231-4/+0
| | | | | | | BUG=NONE Review URL: http://codereview.chromium.org/2824024 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50625 0039d316-1c4b-4281-b951-d872f2087c98
* Add support for international domain names in PAC scripts. This converts ↵eroman@chromium.org2010-06-233-6/+65
| | | | | | | | | | non-ASCII hostnames in dnsResolve() and dnsResolveEx() to punycode. BUG=47234 TEST=ProxyResolverV8Test.DNSResolutionOfInternationDomainName Review URL: http://codereview.chromium.org/2842017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50624 0039d316-1c4b-4281-b951-d872f2087c98
* Remove an unused member field.eroman@chromium.org2010-06-233-8/+4
| | | | | | | BUG=46821 Review URL: http://codereview.chromium.org/2826012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50612 0039d316-1c4b-4281-b951-d872f2087c98
* Address a couple of nits in comment wording.eroman@chromium.org2010-06-234-12/+13
| | | | | | | BUG=NONE Review URL: http://codereview.chromium.org/2830022 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50611 0039d316-1c4b-4281-b951-d872f2087c98
* Fix files with svn:executable permissions.thestig@chromium.org2010-06-234-0/+0
| | | | | | | BUG=none TEST=none git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50566 0039d316-1c4b-4281-b951-d872f2087c98
* Clang: Do not ignore result of HANDLE_EINTR.thakis@chromium.org2010-06-231-1/+2
| | | | | | Review URL: http://codereview.chromium.org/2805026 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50556 0039d316-1c4b-4281-b951-d872f2087c98
* Enable the disabled test ProxyResolverV8Test.ReturnUnicode, by addressing ↵eroman@chromium.org2010-06-235-111/+202
| | | | | | | | | | | | some encoding issues. Switched some uses of UTF-8 encoded std::strings to UTF-16 encoded string16 -- this avoids the confusion on which strings are unicode, since these std::string were getting passed around and later assumed to be ASCII. BUG=46608, 47234 Review URL: http://codereview.chromium.org/2827018 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50549 0039d316-1c4b-4281-b951-d872f2087c98
* Add an additional per-request DNS cache when executing FindProxyForURL() ↵eroman@chromium.org2010-06-226-32/+238
| | | | | | | | | | | | | | from a PAC script. This mini-cache is more aggressive in caching negative resolutions, to avoid performance problems with PAC scripts that do lots of serial DNS resolves. This is necessary now that we no longer globally cache DNS resolve failures to avoid performance regressions. BUG=46821 Review URL: http://codereview.chromium.org/2833021 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50495 0039d316-1c4b-4281-b951-d872f2087c98
* Style-fix: make a parameter a const reference.eroman@chromium.org2010-06-222-2/+2
| | | | | | Review URL: http://codereview.chromium.org/2873007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50491 0039d316-1c4b-4281-b951-d872f2087c98
* Factor out factory method for Google GET request, which is constructed ↵mlloyd@chromium.org2010-06-221-117/+53
| | | | | | | | | | identically 16 times. TEST=Test passes. Review URL: http://codereview.chromium.org/2812011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50488 0039d316-1c4b-4281-b951-d872f2087c98
* Initial commit of CookieMonster statistics.rdsmith@google.com2010-06-222-18/+90
| | | | | | | | | | | | | | | | | Specifically: * Number of cookies, recorded every ten minutes of active browsing (i.e. cookies being requested from CookieMonster) * Last access time, recorded when cookie accessed. * Last access time for evicted cookies, recorded on eviction * Time until cookie expires, recorded on insertion. * Reason for a cookie being removed from store, recorded when removed. * Size of batch update to persistent cookie store and whether it succeeded or failed, recorded at success/failure. BUG=4005 TEST=net_unittests CookieMonster.* on Linux Review URL: http://codereview.chromium.org/2718011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50477 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 50402 (build failure) - Pass in NetLog to NetworkChangeNotifier.willchan@chromium.org2010-06-2110-52/+15
| | | | | | | | | | | BUG=46822 Review URL: http://codereview.chromium.org/2857009 TBR=willchan@chromium.org Review URL: http://codereview.chromium.org/2843017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50406 0039d316-1c4b-4281-b951-d872f2087c98
* Pass in NetLog to NetworkChangeNotifier.willchan@chromium.org2010-06-2110-15/+52
| | | | | | | | BUG=46822 Review URL: http://codereview.chromium.org/2857009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50402 0039d316-1c4b-4281-b951-d872f2087c98
* A/B test for determining a value for unused socket timeout. Currently theziadh@chromium.org2010-06-217-12/+45
| | | | | | | | | | | | | | timeout defaults to 10 seconds. Having this value set too low won't allow us to take advantage of idle sockets. Setting it to too high could possibly result in more ERR_CONNECT_RESETs, requiring one RTT to receive the RST packet and possibly another RTT to re-establish the connection. r=jar Review URL: http://codereview.chromium.org/2827016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50364 0039d316-1c4b-4281-b951-d872f2087c98