summaryrefslogtreecommitdiffstats
path: root/chrome/browser/safe_browsing
Commit message (Collapse)AuthorAgeFilesLines
* Revert 14569abarth@chromium.org2009-04-261-21/+0
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14573 0039d316-1c4b-4281-b951-d872f2087c98
* Add some histograms to see how often users click through blocking pages.abarth@chromium.org2009-04-261-0/+21
| | | | | | | | R=jar Review URL: http://codereview.chromium.org/99020 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14569 0039d316-1c4b-4281-b951-d872f2087c98
* Fix a leak of the NavigationController during many tests. A duplicatebrettw@chromium.org2009-04-211-3/+3
| | | | | | | | | | NavigationController was begin created from when we had to create this separately. BUG=10781 Review URL: http://codereview.chromium.org/88018 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14084 0039d316-1c4b-4281-b951-d872f2087c98
* Rename WebContentsView* to TabContentsView* in preparation for mergingbrettw@chromium.org2009-04-201-1/+1
| | | | | | | | | | TabContents and WebContents. This also removes the Destroy method from the print manager's header file. I removed the impl in a previous change but forgot the header. Review URL: http://codereview.chromium.org/90004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14063 0039d316-1c4b-4281-b951-d872f2087c98
* Re-land my change to clean up TabContents/WebContents ownership. Thisbrettw@chromium.org2009-04-203-21/+19
| | | | | | | | | | | | | | | | | | | | | | | | is the same except in tab_strip_model_unittest I fixed a leak by making a WebContents on the stack, I added a factory to the SiteInstance unittest to prevent another leak, and I re-added a NULL set to the external_tab_container. Fix the ownership model of TabContents and NavigationController. Previously the NavigationController owned the TabContents, and there were extra steps required at creation and destruction to clean everything up properly. NavigationController is now a member of TabContents, and there is no setup or tear down necessary other than the constructor and destructor. I could remove the tab contents creation in the NavigationController, as well as all the weird destruction code in WebContents which got moved to the destructor. I made the controller getter return a reference since the ownership is clear and there is no possibility of NULL. This required changing a lot of tiles, but many of them were simplified since they no longer have to NULL check. Previous review URL: http://codereview.chromium.org/69043 Review URL: http://codereview.chromium.org/67294 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14053 0039d316-1c4b-4281-b951-d872f2087c98
* Reverting 14005.brettw@chromium.org2009-04-183-19/+21
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14006 0039d316-1c4b-4281-b951-d872f2087c98
* Fix the ownership model of TabContents and NavigationController. Previously thebrettw@chromium.org2009-04-183-21/+19
| | | | | | | | | | | | | | | | | NavigationController owned the TabContents, and there were extra steps required at creation and destruction to clean everything up properly. NavigationController is now a member of TabContents, and there is no setup or tear down necessary other than the constructor and destructor. I could remove the tab contents creation in the NavigationController, as well as all the weird destruction code in WebContents which got moved to the destructor. I made the controller getter return a reference since the ownership is clear and there is no possibility of NULL. This required changing a lot of tiles, but many of them were simplified since they no longer have to NULL check. Review URL: http://codereview.chromium.org/69043 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14005 0039d316-1c4b-4281-b951-d872f2087c98
* Create a test program for generating false positive statisticspaulg@google.com2009-04-171-0/+280
| | | | | | | | | | | | | | for SafeBrowsing data. The program reads a regular SafeBrowsing database and creates bloom filters of various sizes, comparing the hit and miss statistics against a list of URLs. BUG=10584 (http://crbug.com/10584) Review URL: http://codereview.chromium.org/67245 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13981 0039d316-1c4b-4281-b951-d872f2087c98
* Reduce the false positive rate for SafeBrowsing gethash requests.paulg@google.com2009-04-174-4/+27
| | | | | | | | | | | | | | | | | | | | | | | | This CL increases the memory consumption of the bloom filter used by the SafeBrowsing system in order to decrease the number of false positive gethash requests (gethash requests that result in an empty or 204 response from the servers). The filter size in bytes is calculated as: number_of_add_prefixes * bits_per_prefix / 8 From analysis of our histograms, users have between 250k - 330k add prefixes. 'bits_per_prefix' is hard coded to 25, which means that we expect the typical bloom filter to be between 760-1000 kB, compared to the current value of approximately 450 kB. We add histograms to track the filter size, as well as the number of gethash requests that return empty results and non-empty results. BUG=10584 (http://crbug.com/10584) Review URL: http://codereview.chromium.org/67243 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13958 0039d316-1c4b-4281-b951-d872f2087c98
* Remove TabContentsType from the NavigationController external interface and inbrettw@chromium.org2009-04-152-7/+7
| | | | | | | some related areas. I removed all uses of this in the previous patch. Review URL: http://codereview.chromium.org/73057 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13730 0039d316-1c4b-4281-b951-d872f2087c98
* Remove unused database code.paulg@google.com2009-04-082-33/+0
| | | | | | | | | The new storage system doesn't check URLs on the DB thread any longer, so this code is never called. Review URL: http://codereview.chromium.org/62110 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13311 0039d316-1c4b-4281-b951-d872f2087c98
* This CL adds unit-tests for the SafeBrowsingBlockingPage class.jcampan@chromium.org2009-04-035-17/+427
| | | | | | | | | | | | | | | | | This required: - creating a factory to create SafeBrowsingBlockingPage instances (so unit-tests can provide their own sub-classes). - making the code posts tasks on the current message loop when there is no IO thread. This should only happen in tests scenarios where we only have 1 thread. BUG=6731 TEST=Run the unit-tests. In Chrome, navigate to pages flagged as malware (ex: ianfette.org) and make sure the safe browsing feature still works as expected. Review URL: http://codereview.chromium.org/56135 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13088 0039d316-1c4b-4281-b951-d872f2087c98
* Remove the old and no longer used SafeBrowsing storagepaulg@google.com2009-03-218-1571/+11
| | | | | | | implementation. Review URL: http://codereview.chromium.org/45016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@12238 0039d316-1c4b-4281-b951-d872f2087c98
* Fix errors detected by coverity.paulg@google.com2009-03-181-6/+6
| | | | | | Review URL: http://codereview.chromium.org/48136 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11981 0039d316-1c4b-4281-b951-d872f2087c98
* Remove unneeded uses of base/hash_tables.h.thestig@chromium.org2009-03-172-2/+0
| | | | | | Review URL: http://codereview.chromium.org/48098 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11928 0039d316-1c4b-4281-b951-d872f2087c98
* Merge DOMUIContents into WebContents.brettw@chromium.org2009-03-171-1/+2
| | | | | | | I did a lot of cleanup of the DOM UI system as part of this. Review URL: http://codereview.chromium.org/42227 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11925 0039d316-1c4b-4281-b951-d872f2087c98
* Removed unneeded includes of base/time.h.thestig@chromium.org2009-03-161-1/+4
| | | | | | Review URL: http://codereview.chromium.org/48019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11766 0039d316-1c4b-4281-b951-d872f2087c98
* Remove logging.h from cc files that don't use it.thestig@chromium.org2009-03-123-3/+0
| | | | | | Review URL: http://codereview.chromium.org/42155 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11593 0039d316-1c4b-4281-b951-d872f2087c98
* Remove unneeded uses of logging.h in header files.thestig@chromium.org2009-03-121-1/+0
| | | | | | Review URL: http://codereview.chromium.org/43148 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11590 0039d316-1c4b-4281-b951-d872f2087c98
* NO CODE CHANGEdeanm@chromium.org2009-03-103-4/+0
| | | | | | | | | Normalize end of file newlines in chrome/. All files end in a single newline. Review URL: http://codereview.chromium.org/42015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11331 0039d316-1c4b-4281-b951-d872f2087c98
* NO CODE CHANGE.maruel@google.com2009-03-059-26/+55
| | | | | | | Split the lines >80 cols. (Part 1) Review URL: http://codereview.chromium.org/39206 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11032 0039d316-1c4b-4281-b951-d872f2087c98
* Fixes CRLF and trailing white spaces.maruel@chromium.org2009-03-055-13/+13
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10982 0039d316-1c4b-4281-b951-d872f2087c98
* revert broken change 10833nsylvain@chromium.org2009-03-031-67/+47
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10837 0039d316-1c4b-4281-b951-d872f2087c98
* Port DictionaryValue to use string16 instead of wstring.dsh@google.com2009-03-031-47/+67
| | | | | | | Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=10818 Review URL: http://codereview.chromium.org/31014 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10833 0039d316-1c4b-4281-b951-d872f2087c98
* Revert dsh's change 10818nsylvain@chromium.org2009-03-031-59/+47
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10821 0039d316-1c4b-4281-b951-d872f2087c98
* Port DictionaryValue to use string16 instead of wstring.dsh@google.com2009-03-031-47/+59
| | | | | | Review URL: http://codereview.chromium.org/31014 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10818 0039d316-1c4b-4281-b951-d872f2087c98
* Remove more ifdefs where all platforms now share the implementation.pinkerton@chromium.org2009-03-031-6/+0
| | | | | | Review URL: http://codereview.chromium.org/39017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10797 0039d316-1c4b-4281-b951-d872f2087c98
* Coalesce more hardcoded schemes to using predefined constants.brettw@chromium.org2009-02-261-1/+3
| | | | | | Review URL: http://codereview.chromium.org/31008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10437 0039d316-1c4b-4281-b951-d872f2087c98
* Enable history and downloads by default, port NewTabUI from DOMUIHost to DOMUI.glen@chromium.org2009-02-251-1/+1
| | | | | | | NewTabUI is only included on OS(WIN) because DOMUI doesn't appear to have been ported. Review URL: http://codereview.chromium.org/28104 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10344 0039d316-1c4b-4281-b951-d872f2087c98
* Use string for Histogram names since these are all ASCII anyway.dsh@google.com2009-02-243-26/+26
| | | | | | | | Wide-character literals cause problems between platforms. Review URL: http://codereview.chromium.org/28046 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10276 0039d316-1c4b-4281-b951-d872f2087c98
* Report malware sub resources and their containing page to thepaulg@google.com2009-02-194-2/+104
| | | | | | | | | | | | | | SafeBrowsing service for faster malware detection. Any malware resource that we detect on a page is reported if the page that contains it is not in the blacklist AND the user has opted in to reporting stats. BUG=7607 (http://crbug.com/7607) Review URL: http://codereview.chromium.org/21474 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10042 0039d316-1c4b-4281-b951-d872f2087c98
* Bring the SafeBrowsingProtocolManager out of scaffolding.paul@chromium.org2009-02-191-7/+1
| | | | | | Review URL: http://codereview.chromium.org/20480 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9996 0039d316-1c4b-4281-b951-d872f2087c98
* Make safe_browsing_blocking_page.cc compile on Posix.jhawkins@chromium.org2009-02-193-8/+5
| | | | | | Review URL: http://codereview.chromium.org/21480 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9994 0039d316-1c4b-4281-b951-d872f2087c98
* Reduce the amount of included header files. Vast change like in "Oh God! ↵maruel@chromium.org2009-02-182-4/+2
| | | | | | | | This revision changes half of the source files!". Review URL: http://codereview.chromium.org/20378 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9958 0039d316-1c4b-4281-b951-d872f2087c98
* Add locale_settings.grd to the build. This generatestc@google.com2009-02-181-5/+3
| | | | | | | | | | | | a locale_settings.h file that we use on all platforms. However, the rc generation isn't correct yet, so for now, use the existing locale_settings_*.rc files. Also go ahead and generate the en-US locale pak on linux. Review URL: http://codereview.chromium.org/20447 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9956 0039d316-1c4b-4281-b951-d872f2087c98
* Move browser_resources.rc into a a grd file. While I'm at it,tc@google.com2009-02-091-1/+2
| | | | | | | | | | | | I removed the flatten_html visual studio rule and just rolled the functionality directly into GRIT. The sln change is to have browser depend on browser_resources (now needed for browser_resources.h). Review URL: http://codereview.chromium.org/21148 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9418 0039d316-1c4b-4281-b951-d872f2087c98
* Port SafeBrowsingProtocolManager to Mac and linux.paul@chromium.org2009-02-061-0/+12
| | | | | | Review URL: http://codereview.chromium.org/20119 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9301 0039d316-1c4b-4281-b951-d872f2087c98
* Port the ResourceDispatcherHost to Mac and linux.paul@chromium.org2009-02-051-2/+8
| | | | | | Review URL: http://codereview.chromium.org/20073 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9231 0039d316-1c4b-4281-b951-d872f2087c98
* Usual round of porting in chrome/phajdan.jr@chromium.org2009-02-051-1/+4
| | | | | | | | | | | | | | | | - make following unit tests run and pass on Linux: browser/cache_manager_host_unittest.cc browser/google_url_tracker_unittest.cc - trivial cleanups needed for GCC - remove CacheManagerHost and ResolveProxyMsgHelper from temporary scaffolding stubs and use real implementations instead - update chrome.xcodeproj to reflect above change Review URL: http://codereview.chromium.org/20057 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9215 0039d316-1c4b-4281-b951-d872f2087c98
* Porting profiles to the Mac.avi@chromium.org2009-01-281-2/+1
| | | | | | Review URL: http://codereview.chromium.org/19623 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8831 0039d316-1c4b-4281-b951-d872f2087c98
* Safe browsing cleanup:estade@chromium.org2009-01-289-42/+47
| | | | | | | | | * wstring -> FilePath * create versions of WriteFile/ReadFile with FilePath signatures Review URL: http://codereview.chromium.org/19610 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8797 0039d316-1c4b-4281-b951-d872f2087c98
* This CL makes the safe browsing interstitial page support multiple unsafe ↵jcampan@chromium.org2009-01-234-170/+426
| | | | | | | | | | | | | | | | | | | | | | | resources in one page. We had a bug when an interstitial was showing and another unsafe resource was detected. We would show another interstitial on top of the original one, causing the DontProceed method to be invoked several times. That would cause us to remove more than once an entry from the navigation controller and cause crashers. With this new CL, if an interstitial shows and a new resource is flagged as bad, the SafeBrowsingBlockingPage will queue that notification. If the user decides to proceed through the interstitial, we'll create another interstitial warning about all the unsafe resources we have received so far. This CL also contains a fix for a crasher that would happen when closing a tab with a safe browsing interstitial. BUG=5916,6207,6306 TEST=Test all actions in the interstitial you get when opening pages with the followin scenarios: - Main page is malware - Main page is fishing - Main page is OK contains resources (images,iframes...) which are malware - Main page is OK contains resources (images,iframes...) which are phishing - Main page is OK contains resources (images,iframes...) some of them phishing, some of then malware. Note that when there are more than one bad resource, it is normal to see a 1st interstitial, then another one listing all the other bad resources. (ex of malware site http://ianfette.org, phishing site http://cvisit.tripod.com) Review URL: http://codereview.chromium.org/18346 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8578 0039d316-1c4b-4281-b951-d872f2087c98
* Replace cases of Append(FILE_PATH_LITERAL()) with AppendASCII("").deanm@chromium.org2009-01-221-2/+2
| | | | | | Review URL: http://codereview.chromium.org/18499 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8454 0039d316-1c4b-4281-b951-d872f2087c98
* Make CommandLine into a normal object, with some statics for getting at the ↵evan@chromium.org2009-01-213-3/+7
| | | | | | | | | | | current process's command line. One explicit goal of this change is to *not* deal with the string/wstring issues at the API on POSIX; the functions are the same as before, which means they remain as broken as before. (I did try to fix the internals, though, so migrating the callers is now possible by adding platform-appropriate hooks.) Review URL: http://codereview.chromium.org/18248 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8347 0039d316-1c4b-4281-b951-d872f2087c98
* End the SafeBrowsing update cycle when the update responsepaulg@google.com2009-01-161-8/+22
| | | | | | | | | | | | | contains no chunk URLs (i.e. the client is up to date). We currently don't handle this case properly, which results in a DCHECK being hit. BUG=6049 (http://crbug.com/6049) Review URL: http://codereview.chromium.org/18181 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8244 0039d316-1c4b-4281-b951-d872f2087c98
* Move url_* to net subdirben@chromium.org2009-01-161-1/+1
| | | | | | Review URL: http://codereview.chromium.org/18305 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8224 0039d316-1c4b-4281-b951-d872f2087c98
* Move a bunch of TabContents related files into a tab_contents subdirben@chromium.org2009-01-153-6/+6
| | | | | | Review URL: http://codereview.chromium.org/18250 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8058 0039d316-1c4b-4281-b951-d872f2087c98
* Fixing crash in SafeBrowsingDatabaseBloom:tommi@chromium.org2009-01-121-4/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When SafeBrowsingDatabaseBloom is going out of scope (see stack trace below) Close() is called. When insert_transaction_ is non NULL, it holds a pointer to the database, |db_|, which is owned by SafeBrowsingDatabaseBloom. Close() closes the database but did not free |insert_transaction_| which causes |insert_transaction_| to attempt to rollback the transaction with an invalid database pointer. The fix is simply to reset the transaction before closing the database. Stack: 0:009> kP ChildEBP RetAddr 0579fa14 027e73e0 ntdll!RtlEnterCriticalSection+0xb 0579fa24 027958e6 chrome_12d0000!winMutexEnter( struct sqlite3_mutex * p = 0xdddddddd)+0x10 [c:\chromium\src\third_party\sqlite\src\mutex_w32.c @ 185] 0579fa34 0278d76c chrome_12d0000!sqlite3_mutex_enter( struct sqlite3_mutex * p = 0xdddddddd)+0x16 [c:\chromium\src\third_party\sqlite\src\mutex.c @ 111] 0579fa80 029655f8 chrome_12d0000!sqlite3_exec( struct sqlite3 * db = 0x06df6618, char * zSql = 0x043feec0 "ROLLBACK", <function> * xCallback = 0x00000000, void * pArg = 0x00000000, char ** pzErrMsg = 0x00000000)+0x4c [c:\chromium\src\third_party\sqlite\src\legacy.c @ 50] 0579faa4 02965523 chrome_12d0000!SQLTransaction::EndCommand( char * command = 0x043feec0 "ROLLBACK")+0x48 [c:\chromium\src\chrome\common\sqlite_utils.cc @ 96] 0579fab8 029654ea chrome_12d0000!SQLTransaction::Rollback(void)+0x23 [c:\chromium\src\chrome\common\sqlite_utils.h @ 57] 0579fac4 02965496 chrome_12d0000!SQLTransaction::~SQLTransaction(void)+0x2a [c:\chromium\src\chrome\common\sqlite_utils.cc @ 82] 0579fad0 01ad0cdf chrome_12d0000!SQLTransaction::`scalar deleting destructor'(void)+0x16 0579faf0 01ac8c49 chrome_12d0000!scoped_ptr<SQLTransaction>::~scoped_ptr<SQLTransaction>(void)+0x3f [c:\chromium\src\base\scoped_ptr.h @ 72] 0579fafc 01ac8a86 chrome_12d0000!SafeBrowsingDatabaseBloom::~SafeBrowsingDatabaseBloom(void)+0x49 [c:\chromium\src\chrome\browser\safe_browsing\safe_browsing_database_bloom.cc @ 61] 0579fb08 017bb3a0 chrome_12d0000!SafeBrowsingDatabaseBloom::`scalar deleting destructor'(void)+0x16 0579fb28 01c66a99 chrome_12d0000!DeleteTask<SafeBrowsingDatabase>::Run(void)+0x40 [c:\chromium\src\base\task.h @ 227] 0579fbd8 01c66b45 chrome_12d0000!MessageLoop::RunTask( class Task * task = 0x0800df10)+0xb9 [c:\chromium\src\base\message_loop.cc @ 308] 0579fbe8 01c67029 chrome_12d0000!MessageLoop::DeferOrRunPendingTask( struct MessageLoop::PendingTask * pending_task = 0x0579fc04)+0x35 [c:\chromium\src\base\message_loop.cc @ 319] 0579fc24 01cea44c chrome_12d0000!MessageLoop::DoWork(void)+0xe9 [c:\chromium\src\base\message_loop.cc @ 408] 0579fd04 01c663bb chrome_12d0000!base::MessagePumpDefault::Run( class base::MessagePump::Delegate * delegate = 0x0579feb4)+0xbc [c:\chromium\src\base\message_pump_default.cc @ 23] 0579fdb0 01c66220 chrome_12d0000!MessageLoop::RunInternal(void)+0xfb [c:\chromium\src\base\message_loop.cc @ 197] 0579fde8 01c660aa chrome_12d0000!MessageLoop::RunHandler(void)+0x90 [c:\chromium\src\base\message_loop.cc @ 181] 0579fe10 01c86d38 chrome_12d0000!MessageLoop::Run(void)+0x3a [c:\chromium\src\base\message_loop.cc @ 155] 0579ffa4 01c86071 chrome_12d0000!base::Thread::ThreadMain(void)+0xb8 [c:\chromium\src\base\thread.cc @ 156] Review URL: http://codereview.chromium.org/17617 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@7891 0039d316-1c4b-4281-b951-d872f2087c98
* Fix linux / mac build.paulg@google.com2009-01-081-2/+2
| | | | | | Review URL: http://codereview.chromium.org/17256 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@7711 0039d316-1c4b-4281-b951-d872f2087c98
* Ignore GetHash results for lists that we don't support.paulg@google.com2009-01-086-41/+85
| | | | | | | BUG=5597 (http://crbug.com/5597) Review URL: http://codereview.chromium.org/16595 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@7710 0039d316-1c4b-4281-b951-d872f2087c98