summaryrefslogtreecommitdiffstats
path: root/net
Commit message (Collapse)AuthorAgeFilesLines
* Add a simple cache of certificates for SSL client authentication.wtc@chromium.org2009-06-186-2/+167
| | | | | | | | | | | | | It is based on FtpAuthCache and will be used in similar ways. The the only difference is that the authentication data is a certificate rather than username and password. R=eroman BUG=http://crbug.com/318 TEST=new unit tests. Review URL: http://codereview.chromium.org/132004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18735 0039d316-1c4b-4281-b951-d872f2087c98
* Revert cl 18723.rvargas@google.com2009-06-1814-1593/+14
| | | | | | | TBR=nsylvain git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18726 0039d316-1c4b-4281-b951-d872f2087c98
* Disk cache: First pass to add support for sparse entries.rvargas@google.com2009-06-1814-14/+1593
| | | | | | | | | | | | Adding Read/Write support. BUG=12258 TEST=unittests. Review URL: http://codereview.chromium.org/126179 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18723 0039d316-1c4b-4281-b951-d872f2087c98
* Fix crashes stemming from ClientSocketPoolBase::ReleaseSocket().willchan@chromium.org2009-06-183-20/+61
| | | | | | | | | BUG=http://crbug.com/13908 TEST=Go to a page that loads lots of content from the same host, and then triggers a redirect (which will cancel the requests). A good example is http://photo.sora.net/album/theme/index.php. Unittest coverage provided in TCPClientSocketPoolTest.CancelActiveRequestWithPendingRequests. Review URL: http://codereview.chromium.org/131023 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18718 0039d316-1c4b-4281-b951-d872f2087c98
* Revert r18683: "Add more CHECKs to ClientSocketPoolBase."willchan@chromium.org2009-06-181-17/+11
| | | | | | | | Looks like it might have broken block-test.html somehow. Review URL: http://codereview.chromium.org/131020 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18688 0039d316-1c4b-4281-b951-d872f2087c98
* Improve chunked encoding parsing.abarth@chromium.org2009-06-182-1/+9
| | | | | | | | | | | | R=abarth BUG=14508 TEST=HttpChunkedDecoderTest.ExcessiveChunkLen Patch contributed by Chris Evans. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18687 0039d316-1c4b-4281-b951-d872f2087c98
* Add more CHECKs to ClientSocketPoolBase.willchan@chromium.org2009-06-181-11/+17
| | | | | | | | BUG=http://crbug.com/14395 Review URL: http://codereview.chromium.org/131017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18683 0039d316-1c4b-4281-b951-d872f2087c98
* Use factories for ConnectingSockets.willchan@chromium.org2009-06-182-33/+93
| | | | | | | | | | This breaks the dependency between ClientSocketPoolBase and the specific ConnectingSocket. The derived class of ClientSocketPool passes in a ConnectingSocketFactory to ClientSocketPoolBase. BUG=http://crbug.com/13289 Review URL: http://codereview.chromium.org/125282 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18681 0039d316-1c4b-4281-b951-d872f2087c98
* Add CHECKs to keep the socket counts in sync.willchan@chromium.org2009-06-172-3/+42
| | | | | | | | | A full chromebot run on 189.0 revealed them getting out of sync, so this should reveal where they get out of sync. BUG=http://crbug.com/14395. Review URL: http://codereview.chromium.org/125276 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18669 0039d316-1c4b-4281-b951-d872f2087c98
* Move most of the code for TCPClientSocketPool into ClientSocketPoolBase for ↵willchan@chromium.org2009-06-174-59/+150
| | | | | | | | | | | sharing. Also rename idle_socket_count() to IdleSocketCount in ClientSocketPool and derived classes, since it's virtual. BUG=http://crbug.com/13289 Review URL: http://codereview.chromium.org/125238 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18622 0039d316-1c4b-4281-b951-d872f2087c98
* Compile fetch_server on POSIX.phajdan.jr@chromium.org2009-06-175-41/+55
| | | | | | | | | | | | More tidy cross-platformness (typedefs instead of #defines) and other simple related cleanups. TEST=none http://crbug.com/14191 Review URL: http://codereview.chromium.org/126218 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18607 0039d316-1c4b-4281-b951-d872f2087c98
* Compile fetch_client on all platforms and add a TODO(port) for fetch_server.phajdan.jr@chromium.org2009-06-171-14/+15
| | | | | | Review URL: http://codereview.chromium.org/126210 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18606 0039d316-1c4b-4281-b951-d872f2087c98
* Reorder URLRequest members so URLRequestContext lasts longer than URLRequestJob.willchan@chromium.org2009-06-171-3/+3
| | | | | | | | BUG=http://crbug.com/14231 Review URL: http://codereview.chromium.org/125235 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18591 0039d316-1c4b-4281-b951-d872f2087c98
* Re-land final subset of r18520.ericroman@google.com2009-06-172-10/+14
| | | | | | | | | | | | The original code review that this belongs to is: <http://codereview.chromium.org/125171>. (BUG=14138) The original was backed out because of a valgrind linux error (BUG=14218), so I relanded it in smaller chunks to see at which point problem happens. This differs from the original, in that I have changed the unit-test to no longer use ScopedMapper + WaitingMapper, which I believe was the source of a race. Review URL: http://codereview.chromium.org/125232 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18587 0039d316-1c4b-4281-b951-d872f2087c98
* Reorder members in URLRequestHttpJob to get correct destruction order.willchan@chromium.org2009-06-172-6/+7
| | | | | | | | BUG=http://crbug.com/14231 Review URL: http://codereview.chromium.org/126257 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18586 0039d316-1c4b-4281-b951-d872f2087c98
* Re-land second-to-last subset of r18520 (now everything is relanded except ↵ericroman@google.com2009-06-173-3/+17
| | | | | | | | | | | | notification of cancellation during destruction). The original code review that this belongs to is:<http://codereview.chromium.org/125171>. (BUG=14138) The original was backed out because of a valgrind linux error (BUG=14218), so I am now re-landing in smaller chunks to identify where the problem resides Review URL: http://codereview.chromium.org/126254 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18583 0039d316-1c4b-4281-b951-d872f2087c98
* Re-land another subset of r18520.ericroman@google.com2009-06-174-16/+121
| | | | | | | | | | | | This particular subset should be a no-op: It adds an unused interface method (OnResolutionCancelled), and an unused test (CancelObserver), and lastly renames Cancel --> MarkAsCanceled(). The code in "dns_global.cc" is also unused since it is unreachable. The original code review that this belongs to is:<http://codereview.chromium.org/125171>. (BUG=14138) The original was backed out because of a valgrind linux error (BUG=14218), so I am now re-landing in smaller chunks to identify where the problem resides. Review URL: http://codereview.chromium.org/126253 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18581 0039d316-1c4b-4281-b951-d872f2087c98
* Re-land a subset of r18520.ericroman@google.com2009-06-172-14/+35
| | | | | | | | | | | | | | | | The original code review for this change was: <http://codereview.chromium.org/125171> The particular subset is the third bullet point in original description: * Fix a bug where completion notification wasn't being sent when the response was cached. (BUG=14188) Note that the original was rolled-back because something was upsetting valgrind (BUG=14218). Review URL: http://codereview.chromium.org/125227 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18579 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 18520.ericroman@google.com2009-06-175-180/+28
| | | | | | | | | | | | | | The original code review for this change was: <http://codereview.chromium.org/125171> It is being reverted because it seems to have caused a valgrind on linux regression: <http://crbug.com14218> BUG=14218,14138,14188 Review URL: http://codereview.chromium.org/126248 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18574 0039d316-1c4b-4281-b951-d872f2087c98
* Fixing a bug in HttpResponseHeaders.GetContentRangehclam@chromium.org2009-06-162-3/+14
| | | | | | | | | The code has a glitch in handling LWS near to the "bytes" token. BUG=14216 Review URL: http://codereview.chromium.org/126229 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18556 0039d316-1c4b-4281-b951-d872f2087c98
* Temporarily disable a test which appears to be causing valgrind errors.eroman@chromium.org2009-06-161-1/+2
| | | | | | | | | | The cause of the problem is not fully understood yet, suppressing to remove noise from the tree. BUG=14218 Review URL: http://codereview.chromium.org/126236 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18553 0039d316-1c4b-4281-b951-d872f2087c98
* Refactor ConnectingSocket out of TCPClientSocketPool.willchan@chromium.org2009-06-162-111/+182
| | | | | | | | | BUG=http://crbug.com/13289 TEST=covered by existing tcp_client_socket_pool_unittest.cc tests. Review URL: http://codereview.chromium.org/125170 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18538 0039d316-1c4b-4281-b951-d872f2087c98
* * Add an OnCancelResolution() notifier to HostResolver::Observer, so ↵ericroman@google.com2009-06-164-27/+178
| | | | | | | | | | | | | | | observers can tell when a request has been cancelled. * Use OnCancelResolution() in DNS prefetcher observer, to avoid leaking entries in the |resolution| table when requests are cancelled. (BUG=14138) * Fix a bug where completion notification wasn't being sent when the response was cached. (BUG=14188) BUG=14138,14188 TEST=HostResolverTest.CancellationObserver, HostResolverTest.Observer Review URL: http://codereview.chromium.org/125171 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18520 0039d316-1c4b-4281-b951-d872f2087c98
* Make HttpNetworkLayer tests network-independent.phajdan.jr@chromium.org2009-06-164-31/+51
| | | | | | | | | | | | This includes a small refactoring which allows using a different socket factory. TEST=Covered by net_unittests. BUG=http://crbug.com/14107 Review URL: http://codereview.chromium.org/126147 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18499 0039d316-1c4b-4281-b951-d872f2087c98
* Bypass the host cache when you refresh a page.ericroman@google.com2009-06-162-6/+53
| | | | | | | | | BUG=13163 TEST=HttpNetworkTransactionTest.BypassHostCacheOnRefresh, HostResolverTest.BypassCache Review URL: http://codereview.chromium.org/125154 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18474 0039d316-1c4b-4281-b951-d872f2087c98
* Take 2. Make TCPClientSocketPool own the ConnectingSockets.willchan@chromium.org2009-06-155-59/+79
| | | | | | | | | | | Fix connecting_sockets_map_ to get updated before running callback. BUG=none TEST=TCPClientSocketPoolTest.RequestTwice BUG=http://crbug.com/13952 Review URL: http://codereview.chromium.org/126168 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18453 0039d316-1c4b-4281-b951-d872f2087c98
* Revert "Make TCPClientSocketPool own the ConnectingSockets."willchan@chromium.org2009-06-154-35/+59
| | | | | | | | | This reverts r18414. Broke reliability bot. Review URL: http://codereview.chromium.org/128001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18436 0039d316-1c4b-4281-b951-d872f2087c98
* Add a regression test for 14056. This verifies that HttpNetworkTransaction ↵ericroman@google.com2009-06-151-0/+73
| | | | | | | | | | sets the "referrer" field expected by the DNS prefetch observer. BUG=14056 Review URL: http://codereview.chromium.org/126112 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18434 0039d316-1c4b-4281-b951-d872f2087c98
* Introduce parent and child entries for MemEntryImplhclam@chromium.org2009-06-155-32/+167
| | | | | | | | | | | | | | | | | | | | | Defines enums for kParentEntry and kChildEntry in MemEntryImpl. Also has code in MemBackendImpl to create a slave entry. Parent entries are non-sparse entries until sparse API are called on them, and they would start to keep a list of child entries. Child entries hold partial content and are not susposed to be accessible from the public and are managed by the parent entry that created it. Child entries are registered in the backend's ranking list to allow individual eviction. More details about how child entries are to be used are in the comments. TEST=DiskCacheEntryTest.MemoryOnlyEnumerationWithSlaveEntries Review URL: http://codereview.chromium.org/120004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18432 0039d316-1c4b-4281-b951-d872f2087c98
* Make TCPClientSocketPool own the ConnectingSockets.willchan@chromium.org2009-06-154-59/+35
| | | | | | | | | | Re-enable the disabled URLRequest tests. BUG=http://crbug.com/13952 TEST=covered by existing tests Review URL: http://codereview.chromium.org/126065 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18414 0039d316-1c4b-4281-b951-d872f2087c98
* Fix segfault in HttpNetworkLayerTest.GoogleGET when network connection fails.phajdan.jr@chromium.org2009-06-151-1/+1
| | | | | | | | | | | | | | | This is rather a workaround for the root cause (test touches the network), but it should not crash anyway. After this patch the test will fail, not segfault. TEST=Covered by net_unittest. Check with network connection disabled. BUG=http://crbug.com/13195 Review URL: http://codereview.chromium.org/125128 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18398 0039d316-1c4b-4281-b951-d872f2087c98
* Initialize IOBuffers in new FTP unit tests (issue detected by valgrind).phajdan.jr@chromium.org2009-06-151-4/+13
| | | | | | | | | | TEST=none BUG=http://crbug.com/12409 Review URL: http://codereview.chromium.org/126120 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18381 0039d316-1c4b-4281-b951-d872f2087c98
* Add unit tests for new FTP network transaction.phajdan.jr@chromium.org2009-06-155-186/+706
| | | | | | | | | | TEST=Covered by net_unittests. http://crbug.com/12409 Review URL: http://codereview.chromium.org/115779 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18375 0039d316-1c4b-4281-b951-d872f2087c98
* [Refactor] Rename DnsResolutionObserver --> HostResolver::Observer.ericroman@google.com2009-06-158-58/+22
| | | | | | | | | | TEST=this is striclty a refactoring; just needs to compile and pass existing tests. BUG=14056 Review URL: http://codereview.chromium.org/126110 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18372 0039d316-1c4b-4281-b951-d872f2087c98
* * Move the global "DnsResolutionObserver" code depended on by DNS ↵ericroman@google.com2009-06-1519-243/+478
| | | | | | | | | | | | | | prefetcher, into HostResolver. This has the advantage that consumers of DNS no longer have to remember to call "DidFinishDnsResolutionWithStatus()" followed by "DidStartDnsResolution()" in order for the prefetcher to observe the resolution. Instead it just happens automatically, and subscribers register via HostResolver::AddObserver() on a particular resolver instance. * To accomodate the prefetcher's observer, HostResolver::Resolve() needs an additional "referrer" parameter. This is slightly awkward since "referrer" has nothing to do with the actual resolve request. To simplify plumbing through this and other optional parameters, Resolve() was changed to take a "RequestInfo&" parameter in place of say {hostname, port, flags}. * Added an option to HostResolver::Resolve() for disallowing cached responses (RequestInfo::allow_cached_response). This will be used when you refresh a page, to bypass the host cache. The code to do this has been added to HttpNetworkTransaction, but is commented out pending an appropriate unit-test to verify it. BUG=14056 Review URL: http://codereview.chromium.org/125107 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18371 0039d316-1c4b-4281-b951-d872f2087c98
* Specify new methods for supporting SSL client authentication.wtc@chromium.org2009-06-1225-60/+282
| | | | | | | | | | | | | | | | | See the changes to url_request.h and ssl_cert_request_info.h. They are similar to the methods for handling SSL certificate errors and HTTP authentication. The handling of servers that request but don't require SSL client authentication is reimplemented using the new methods. R=rvargas,eroman BUG=http://crbug.com/318 TEST=none Review URL: http://codereview.chromium.org/118039 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18322 0039d316-1c4b-4281-b951-d872f2087c98
* Included text/css content type into list of the supported non image files. abarth@chromium.org2009-06-121-3/+9
| | | | | | | | | | | | | | | | | | Now css files are opened inside browser instead of download. Also - making lint happy on the mime_util.cc BUG=7192 R=abarth TEST=MimeTypeTests.MimeTypeTests Patch by Yuri Gorobets. Original review URL: http://codereview.chromium.org/125005 Review URL: http://codereview.chromium.org/125058 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18306 0039d316-1c4b-4281-b951-d872f2087c98
* Http Cache: First pass of byte-range requests support.rvargas@google.com2009-06-127-64/+647
| | | | | | | | | | | | | | | | | | | | | | This is the first pass to implement support for range requests and the asociated sparse cache entry. It is disabled by default, and requires ENABLE_RANGE_SUPPORT to be defined in order to activate the code: all the code is compiled in, but Start() bypasses the cache for range requests, and OnNetworkInfoAvailable ignores 206. Big parts are still not implemented. Most notably we are not modifying the response headers that we send to the user, so the content-range and content-length info are not correct. BUG=12258 TEST=Unit tests. Review URL: http://codereview.chromium.org/118345 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18289 0039d316-1c4b-4281-b951-d872f2087c98
* Remove most field trial uses of DNS impact testjar@chromium.org2009-06-122-27/+11
| | | | | | | | | | | | | | | | | The focus on DNS prefetching has moved to optimize primarilly the RequestToFinish time in the renderer. As a result, I've removed most of the modulations of the histogram names other than that focal histogram. I've also extended the duration for RequestToFinish, and enhanced its granularity, changing the name to RequestToFinish_L. Dave: Please review the renderer histogram changes. Will: Please review the network histogram changes. You can also suggest any histograms that you think would be removed at this point. r=davemoore,willchan Review URL: http://codereview.chromium.org/126023 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18283 0039d316-1c4b-4281-b951-d872f2087c98
* Temporarily disable tests causing memory leaks.ericroman@google.com2009-06-122-3/+10
| | | | | | | | BUG=13952 TBR=willchan Review URL: http://codereview.chromium.org/126044 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18263 0039d316-1c4b-4281-b951-d872f2087c98
* Fix TCPClientSocketPoolTest to play well with HostCache.willchan@chromium.org2009-06-121-60/+89
| | | | | | | | | Most of the changes were simply because the requests after the first one don't return ERR_IO_PENDING, but instead succeed synchronously. Along the way, make some test improvements. Don't have to Sleep anymore in tests. Re-enable a broken test from before. Review URL: http://codereview.chromium.org/125038 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18261 0039d316-1c4b-4281-b951-d872f2087c98
* Disable URLRequestTest.CancelTest4 since it started leaking.willchan@chromium.org2009-06-121-1/+1
| | | | | | | | I understand the bug now, but need more time to fix it. Will look at this tomorrow. Review URL: http://codereview.chromium.org/126042 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18260 0039d316-1c4b-4281-b951-d872f2087c98
* Include <stdlib.h> for the declarations of memcpy, malloc, free.ericroman@google.com2009-06-121-0/+1
| | | | | | | | | | This is needed for the "chromium-rel-linux-jaunty" builder. BUG=13163 Review URL: http://codereview.chromium.org/126038 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18255 0039d316-1c4b-4281-b951-d872f2087c98
* Experiment: turn off host caching to see if it relates to client socket pool ↵ericroman@google.com2009-06-122-3/+9
| | | | | | | | leak in URLRequestTest.Cancel[24]. Review URL: http://codereview.chromium.org/126035 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18249 0039d316-1c4b-4281-b951-d872f2087c98
* Try to track down a dangling ClientSocketHandle* by upgrading DCHECKs to CHECKs.willchan@chromium.org2009-06-122-28/+32
| | | | | | | | | Add exception handling code for GetLoadState() for when a ClientSocketHandle doesn't exist. BUG=http://crbug.com/13908 Review URL: http://codereview.chromium.org/125025 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18242 0039d316-1c4b-4281-b951-d872f2087c98
* Remove a DCHECK which is being hit because of a unit-test's particular setup.ericroman@google.com2009-06-121-1/+4
| | | | | | | | TBR=willchan Review URL: http://codereview.chromium.org/126028 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18240 0039d316-1c4b-4281-b951-d872f2087c98
* * Avoid doing concurrent DNS resolves of the same hostname in HostResolver.ericroman@google.com2009-06-1242-179/+1777
| | | | | | | | | | | | | | | | * Add a 1 minute cache for host resolves. * Refactor HostResolver to handle multiple requests. * Make HostResolver a dependency of URLRequestContext. operate the HostResolver in async mode for proxy resolver (bridging to IO thread). TEST=unittests BUG=13163 Review URL: http://codereview.chromium.org/118100 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18236 0039d316-1c4b-4281-b951-d872f2087c98
* Introduce HttpStream and HttpBasicStream.willchan@chromium.org2009-06-114-5/+113
| | | | | | | | | | | | This is the beginning of the http pipelining work. Introduce HttpStream, an interface for reading and writing to http streams. Provide a basic implementation with HttpBasicStream. Switch HttpNetworkTransaction to reading/writing via HttpStream rather than directly to the socket. Note that the interface will have to change later on. Read/Write() is the wrong interface, since a pipelining HttpStream implementation will have to detect the end of an http response, rather than having the client (HttpNetworkTransaction) do that. This is just the first step. For information of the general roadmap for http pipelining, please refer to the bug. BUG=http://crbug.com/8991 TEST=none Review URL: http://codereview.chromium.org/119346 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18199 0039d316-1c4b-4281-b951-d872f2087c98
* Disk cache: Avoid recursion when trimming entries.rvargas@google.com2009-06-103-3/+9
| | | | | | | | | | | | | | TrimCacheV2() calls EvictEntry() to move a given entry to the "deleted" list. EvictEntry() deletes the actual data, and that may end up calling ModifyStorageSize() and TrimCacheV2() again. BUG=b/1909376 TEST=none Review URL: http://codereview.chromium.org/121002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18115 0039d316-1c4b-4281-b951-d872f2087c98
* Revert "Move much of the TCPClientSocketPool implementation out into ↵willchan@chromium.org2009-06-107-805/+501
| | | | | | | | | | ClientSocketPoolBase..." This reverts r18034. Review URL: http://codereview.chromium.org/119413 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18046 0039d316-1c4b-4281-b951-d872f2087c98