summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions
Commit message (Collapse)AuthorAgeFilesLines
* Fix the win build. path is being modified and returned, so it can't be a ↵jhawkins@chromium.org2009-07-241-1/+1
| | | | | | | | const ref. TBR=finnur git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21547 0039d316-1c4b-4281-b951-d872f2087c98
* More (temporary) cleanup for theme installation:aa@chromium.org2009-07-243-28/+52
| | | | | | | | | | | - Modify the gallery URL to only allow SSL. - Remove the special case that allowed theme installation without --enable-extension. Now that we have the gallery special case this is not necessary anymore. - Modify the dialog language to be a little less lame. Review URL: http://codereview.chromium.org/159301 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21543 0039d316-1c4b-4281-b951-d872f2087c98
* Coverity: Pass strings and GURLs by reference.jhawkins@chromium.org2009-07-243-6/+11
| | | | | | | | | CID=5051,5052,5053 BUG=none TEST=none Review URL: http://codereview.chromium.org/159343 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21541 0039d316-1c4b-4281-b951-d872f2087c98
* Coverity: Pass strings by reference.jhawkins@chromium.org2009-07-248-24/+28
| | | | | | | | | CID=4459,4563,4564,4566,4567,4569,4570,4571,4803 BUG=none TEST=none Review URL: http://codereview.chromium.org/159342 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21540 0039d316-1c4b-4281-b951-d872f2087c98
* Push bookmarks.remove/removeAll polymorphism into c++. fix bookmarks id ↵rafaelw@chromium.org2009-07-243-12/+22
| | | | | | | | | | | schema issues (http://code.google.com/p/chromium/issues/detail?id=17562 failed to update schema types from int to string). R=erikkay BUG=17417 Review URL: http://codereview.chromium.org/160064 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21503 0039d316-1c4b-4281-b951-d872f2087c98
* Another try at enabling the content script messaging test.mpcomplete@chromium.org2009-07-242-13/+23
| | | | | | | | | | | | | Also fixes some issues that that test exposes. My previous attempt (http://src.chromium.org/viewvc/chrome?view=rev&revision=21324) was reverted. TEST=no BUG=no Review URL: http://codereview.chromium.org/160048 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21483 0039d316-1c4b-4281-b951-d872f2087c98
* Headers cleanup:phajdan.jr@chromium.org2009-07-231-1/+1
| | | | | | | | | - reduce header dependencies by using bookmark_model_observer.h - replace #include <iostream> by #include <iosfwd> in headers Review URL: http://codereview.chromium.org/159280 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21444 0039d316-1c4b-4281-b951-d872f2087c98
* Unbreak extension installation. Cleanup accidentally reversedaa@chromium.org2009-07-231-1/+1
| | | | | | | | | boolean logic. Difficult to test because this is way up close to the UI. Review URL: http://codereview.chromium.org/160002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21376 0039d316-1c4b-4281-b951-d872f2087c98
* Split the IPC code into ipc/agl@chromium.org2009-07-221-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This splits the ipc code from the common project. The 'common' project pulls in all of webkit, the v8 bindings, skia, googleurl, and a number of other projects which makes it very difficult to deal with especially for external projects wanting just to use some of Chromium's infrastructure. This puts the ipc code into its top-level ipc/ directory with a dependency only on base. The common project depends on the new ipc/ipc.gyp:ipc target so that all projects currently pulling common in to get the IPC code still have it available. This mostly follows agl's pre-gyp attempt to do this which was r13062. Known issues: - Currently a number of projects depend on chrome/chrome.gyp:common in order to use the IPC infrastructure. Rather than fixing all of these dependencies I have made common depend on ipc/ipc.gyp:ipc and added "ipc" to the include_rules section of DEPS so that checkdeps.py doesn't complain. Over time projects that need IPC should depend on the IPC project themselves and dependencies on common removed, although I don't think many projects that need IPC will be able to get away without common currently. - ipc/ipc_message_macros.h still has #include "chrome/common/..." inside of a ipc/ should not refer to files in chrome/... now. I'm not sure how to resolve this since it's really an IDE bug - the named pipe name (windows+linux) and the logging event name (all) + env variable (posix) refer explicitly to 'Chrome' which somewhat hurts the illusion of ipc/ being an independent library. I think this should be examined in a subsequent, much smaller patch. - I've eliminated the IPC.SendMsgCount counter since it was implemented in a way to create a dependency from ipc/ to chrome/common/chrome_counters. This is the same approach that r13062 took. http://codereview.chromium.org/155905 (Patch from James Robinson) git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21342 0039d316-1c4b-4281-b951-d872f2087c98
* Fix my previous revert. Merge issues.mpcomplete@chromium.org2009-07-221-3/+0
| | | | | | TBR: aa git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21341 0039d316-1c4b-4281-b951-d872f2087c98
* Revert "Fix an issue with unregistering content script contexts."mpcomplete@chromium.org2009-07-221-0/+2
| | | | | | | | | | | | browser_tests are not happy. TBR=aa BUG=no TEST=no Review URL: http://codereview.chromium.org/159243 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21340 0039d316-1c4b-4281-b951-d872f2087c98
* Disable 2 extension messaging browsertests until I can figure out why they arempcomplete@chromium.org2009-07-221-0/+4
| | | | | | | | | | | | failing on the buildbot. TBR=aa BUG=no TEST=no Review URL: http://codereview.chromium.org/159235 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21336 0039d316-1c4b-4281-b951-d872f2087c98
* Fix an issue with unregistering content script contexts.mpcomplete@chromium.org2009-07-221-3/+0
| | | | | | | | | | | Reenable content script messaging test. BUG=no TEST=no Review URL: http://codereview.chromium.org/155887 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21324 0039d316-1c4b-4281-b951-d872f2087c98
* Nasty short-term hack to special case display of dialogaa@chromium.org2009-07-223-26/+59
| | | | | | | | | | | | | | | on theme installation. It should not be displayed if the theme was installed from our gallery URL. I intend to fix this very soon, but I wanted it to make this coming build, so I did this quick thing for now. Also, I found another bug in ExtensionsService install logic. There was a test, it was ensuring the wrong behavior :(. Review URL: http://codereview.chromium.org/155936 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21321 0039d316-1c4b-4281-b951-d872f2087c98
* Addressing minor review comments in ExtensionProcessManager post-submit.finnur@chromium.org2009-07-221-0/+3
| | | | | | | | | BUG=None TEST=None (no significant changes) Review URL: http://codereview.chromium.org/159073 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21244 0039d316-1c4b-4281-b951-d872f2087c98
* Changed the extension.connect() API not to broadcast to all tabs. Added ampcomplete@chromium.org2009-07-208-188/+240
| | | | | | | | | | | | | more specific tabs.connect(tabId) API to connect to a specific tab. Also changed the ExtensionMessageService from a singleton to a Profile-owned object. BUG=12461 TEST=no Review URL: http://codereview.chromium.org/155707 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21102 0039d316-1c4b-4281-b951-d872f2087c98
* Begin work on extension shelf for Linux.phajdan.jr@chromium.org2009-07-171-0/+2
| | | | | | | | | | | For now it displays only a placeholder text, but knows when to display (it's connected to the ExtensionShelfModel). TEST=none http://crbug.com/16759 Review URL: http://codereview.chromium.org/159019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21014 0039d316-1c4b-4281-b951-d872f2087c98
* A small start: add icons to the extension manifest.aa@chromium.org2009-07-171-0/+11
| | | | | | Review URL: http://codereview.chromium.org/155662 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20941 0039d316-1c4b-4281-b951-d872f2087c98
* First step in abstracting extension api to common/shared "IDL" files ↵rafaelw@chromium.org2009-07-168-61/+65
| | | | | | | | | | | | | | (jsonschema). In this step, All "normal" api calls and events (those that arrive or originate from the browser process) are routed through a single v8::Extension API Call ("StartRequest"). Additionally, internal string names for methods and events now match the js namespace (i.e. "RemoveTab" -> "tabs.remove"), in anticipation of having names be implicit from their api module & name in the api "IDL". TBR=aa,mpcomplete Review URL: http://codereview.chromium.org/149730 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20910 0039d316-1c4b-4281-b951-d872f2087c98
* Change getLanguage to detectLanguage, and incorporate corresponding changes, ↵sidchat@google.com2009-07-165-10/+10
| | | | | | | | | | in tab extensions. Also, use ISO language (e.g. "fr" instead of "French") as return language. BUG=none TEST=Enable extensions, add the given toolstrip as extension. For a page, the language of the page should be returned as ISO language (e.g., "french" as "fr") Review URL: http://codereview.chromium.org/149627 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20895 0039d316-1c4b-4281-b951-d872f2087c98
* Fix for bug where we would not create ExtensionFunctionDispatcheraa@chromium.org2009-07-163-0/+19
| | | | | | | | | | instances for ExtensionDOMUI if RenderView was reused. BUG=16853 TEST=Added browser test Review URL: http://codereview.chromium.org/155592 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20880 0039d316-1c4b-4281-b951-d872f2087c98
* Add more browser tests for Task Manager.phajdan.jr@chromium.org2009-07-151-6/+7
| | | | | | | | | TEST=Covered by browser_tests. http://crbug.com/12127 Review URL: http://codereview.chromium.org/155433 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20786 0039d316-1c4b-4281-b951-d872f2087c98
* Retrying this patch. This was already reviewed by mpcomplete and thefinnur@chromium.org2009-07-158-7/+78
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | only change is a fix for the UI test that broke and a small change to event_bindings.cc (reviewed in-person). ExtensionFunctionDispatcher now notifies ExtensionProcessManager of renderviews created, which in turn notifies the renderer of page actions that it knows about. Remove generic event "page-action-executed" in favor of page action specific event (sent as extension_id/page_action_id). In the bindings, we now setup events for each page action we know about so we can register for specific events, and not receive broadcast events from all page actions. To setup these events I added a GetCurrentPageActions() to extension_process_bindings.cc and a helper function GetCurrentExtensionId(). And, finally, I simplified the page action background page by removing the check to see if we are already subscribed to the feed (since we now support multiple feed readers, it doesn't make sense anymore to always check Google Reader). This check might make a comeback later in a different form. TBR=mpcomplete BUG=13936 TEST=The RSS sample extension should work as before. Review URL: http://codereview.chromium.org/149683 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20782 0039d316-1c4b-4281-b951-d872f2087c98
* Disable MessagingContentScript. It's failing on the buildbot.mpcomplete@chromium.org2009-07-151-0/+3
| | | | | | | | | | BUG=no TEST=no TBR=aa Review URL: http://codereview.chromium.org/155580 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20761 0039d316-1c4b-4281-b951-d872f2087c98
* Reenable content script messaging test.mpcomplete@chromium.org2009-07-151-4/+0
| | | | | | | | | | | Remove temporary change now that webkit DEPS roll landed. TEST=no BUG=16228 Review URL: http://codereview.chromium.org/149655 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20755 0039d316-1c4b-4281-b951-d872f2087c98
* Lands http://codereview.chromium.org/155428 for Thiago, which changessky@chromium.org2009-07-152-11/+0
| | | | | | | | | | | | | | from me to get the thing to work. Merging two versions of BookmarkNodeRemoved into one. BUG=None TEST=Remove some bookmarks from BookmarkBar or Bookmarks Manager and make sure everything works ok. Review URL: http://codereview.chromium.org/155572 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20739 0039d316-1c4b-4281-b951-d872f2087c98
* Various minor fixes:aa@chromium.org2009-07-153-64/+90
| | | | | | | | | | | | | | | | * --load-extension no longer requires --enable-extensions * No longer support chrome:// URLs for user scripts * Remove old unused Greasemonkey test * Enable Greasemonkey API emulation in linux/mac BUG=16720,16007,4476 TEST=Added several unit tests Original review: http://codereview.chromium.org/149619 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20719 0039d316-1c4b-4281-b951-d872f2087c98
* Reverting 20714.finnur@chromium.org2009-07-157-69/+3
| | | | | | | Rietveld showed all green try bots, but looks like one ui test is failing Review URL: http://codereview.chromium.org/149668 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20715 0039d316-1c4b-4281-b951-d872f2087c98
* EFD now notifies EPM of renderviews created, which in turn notifies the ↵finnur@chromium.org2009-07-157-3/+69
| | | | | | | | | | | | | | | | renderer of page actions that it knows about. Remove generic event "page-action-executed" in favor of page action specific event (sent as extension_id/page_action_id). In the bindings, we now setup events for each page action we know about so we can register for specific events, and not receive broadcast events from all page actions. To setup these events I added a GetCurrentPageActions() to extension_process_bindings.cc and a helper function GetCurrentExtensionId(). And, finally, I simplified the page action background page by removing the check to see if we are already subscribed to the feed (since we now support multiple feed readers, it doesn't make sense anymore to always check Google Reader). This check might make a comeback later in a different form. BUG=13936 TEST=The RSS sample extension should work as before. Review URL: http://codereview.chromium.org/155514 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20714 0039d316-1c4b-4281-b951-d872f2087c98
* Remove the defunct SetAccelerator message and replace it with anamit@chromium.org2009-07-141-2/+10
| | | | | | | | | | | automation message to set initial settings. BUG=none TEST=none Review URL: http://codereview.chromium.org/155376 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20676 0039d316-1c4b-4281-b951-d872f2087c98
* This provides a simpler js template engine than JsTemplate. It has beenarv@google.com2009-07-141-3/+6
| | | | | | | | | | | | | | | | | | optimized for the way we do internationalization with JST before and is about 4 times faster (average 4.8ms vs 22.8ms) for the history page. The syntax for this is very similar to JsTemplates. It uses the attributes i18n-values and i18n-content which worls like jsvalues and jscontent except that it does not allow arbitrary expressions. BUG=None TEST=All UI pages should work as before Review URL: http://codereview.chromium.org/149420 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20590 0039d316-1c4b-4281-b951-d872f2087c98
* Nukes the 3 arg TabMoved variant in favor of the 4 arg variant.sky@chromium.org2009-07-132-4/+6
| | | | | | | | | BUG=16634 TEST=none Review URL: http://codereview.chromium.org/155441 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20581 0039d316-1c4b-4281-b951-d872f2087c98
* Try the original CL "Always persist bookmark IDs" again with the fix tomunjal@chromium.org2009-07-134-28/+68
| | | | | | | | | | | | | | Valgrind issue. The fix is in bookmark_storage.h - initialized the newly added member ids_reassigned_ of LoadDetails class. See http://codereview.chromium.org/149310 for the original CL. TEST=NONE BUG=16068 Review URL: http://codereview.chromium.org/155456 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20565 0039d316-1c4b-4281-b951-d872f2087c98
* Revert "Always persist bookmark IDs."tc@google.com2009-07-134-68/+28
| | | | | | | | | | | | | This reverts commit r20532 because valgrind was complaining about uninitialized memory: http://build.chromium.org/buildbot/waterfall/builders/Chromium%20Linux%20(valgrind)/builds/697/steps/valgrind%20test:%20unit/logs/stdio TBR=munjal Review URL: http://codereview.chromium.org/155448 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20550 0039d316-1c4b-4281-b951-d872f2087c98
* Refactoring handle and dragging a bit in preparation for moles. The primary ↵erikkay@chromium.org2009-07-132-23/+42
| | | | | | | | change for this is to get rid of the concept of a "current" toolstrip and the idea that there's only one handle around. Instead, each toolstrip has its own handle and each can be displaying it independently. There's some initial work for moles in there, but it's disabled since this will require some other plumbing to hook up properly. Review URL: http://codereview.chromium.org/155192 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20544 0039d316-1c4b-4281-b951-d872f2087c98
* Always persist bookmark IDs.munjal@chromium.org2009-07-134-28/+68
| | | | | | | | | | | | | | | | Remove the preference to persist IDs. NOTE that we need to save the file the first time with IDs since existing bookmark files won't have IDs and the file won't be saved until something changes in the bookmark model. So we need to explicitly save once when we assign ids for the first time. TEST=NONE BUG=16068 Review URL: http://codereview.chromium.org/149310 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20532 0039d316-1c4b-4281-b951-d872f2087c98
* Add an optional channel name to the extension message connect event.mpcomplete@chromium.org2009-07-133-43/+77
| | | | | | | | | | | Also changed the way port IDs work internally to reduce confusion. Each end of the port has its own ID, not the ID of its opposite end. BUG=13706 TEST=no Review URL: http://codereview.chromium.org/155381 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20519 0039d316-1c4b-4281-b951-d872f2087c98
* Refactor extension constants to improve readability, debugging, and to make ↵erikkay@chromium.org2009-07-133-8/+14
| | | | | | | | it easier to add new constants. Review URL: http://codereview.chromium.org/155407 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20483 0039d316-1c4b-4281-b951-d872f2087c98
* Fix leaks in ExtensionUpdater unit testsasargent@chromium.org2009-07-102-6/+8
| | | | | | | | | BUG=http://crbug.com/16444 TEST=none Review URL: http://codereview.chromium.org/149479 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20430 0039d316-1c4b-4281-b951-d872f2087c98
* Remove svn:executable property from some more files that don't need it.thestig@chromium.org2009-07-1010-0/+0
| | | | | | | TBR=evmar Review URL: http://codereview.chromium.org/149471 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20406 0039d316-1c4b-4281-b951-d872f2087c98
* Temporarily disable unit tests with leaks until I can check in a fix for them.asargent@chromium.org2009-07-101-5/+5
| | | | | | | | | | | BUG=http://crbug.com/16444 TEST=none TBR=eroman Review URL: http://codereview.chromium.org/155362 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20393 0039d316-1c4b-4281-b951-d872f2087c98
* ExtensionBrowserEventRouter now observes TAB_CONTENTS_DESTROYED. This became ↵rafaelw@chromium.org2009-07-101-14/+18
| | | | | | | | | | necessary with the addition of dockable devtools TabContents. It is now possible for Tab contents to close after having been detached without being re-attached to a browser (as in the case of docking). TBR=pfeldman Review URL: http://codereview.chromium.org/149429 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20387 0039d316-1c4b-4281-b951-d872f2087c98
* Implementation of Extension Updater.asargent@chromium.org2009-07-106-37/+1264
| | | | | | | | | | | | This also contains changes to the ExtensionsService to hook up the ExtensionUpdater. BUG=http://crbug.com/12117 TEST=Extensions still work Review URL: http://codereview.chromium.org/149213 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20379 0039d316-1c4b-4281-b951-d872f2087c98
* Add getLanguage function to tab extension.sidchat@google.com2009-07-107-7/+91
| | | | | | | | BUG=none TEST=enable extensions using the toolstip.html code (added with this CL) and load pages in different languages. The corresponding language should appear in the bottom left after the page is loadedm or when the button is clicked, or when you navigate back to that tab after visiting some other tab. Review URL: http://codereview.chromium.org/150062 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20378 0039d316-1c4b-4281-b951-d872f2087c98
* Properly restart extensions with no visible UI.phajdan.jr@chromium.org2009-07-101-1/+7
| | | | | | | | http://crbug.com/16070 Review URL: http://codereview.chromium.org/149416 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20376 0039d316-1c4b-4281-b951-d872f2087c98
* Move some more interfaces on RenderViewHostDelegate to separate classes. Thebrettw@chromium.org2009-07-092-3/+3
| | | | | | | | ones in the patch are those that are implemented by other classes, avoiding TabContents pass-throughs. Review URL: http://codereview.chromium.org/149373 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20324 0039d316-1c4b-4281-b951-d872f2087c98
* Add a rudamentary feed preview to the RSS extension. Itfinnur@chromium.org2009-07-093-1/+163
| | | | | | | | | | | | | | | | | | | | | doesn't handle inline HTML in the item description (it just dumps it as text) and the feed needs to be valid XML for it to show any preview, but it is better than nothing. We can easily change it to display the HTML but we want to (at some point) try to use a separate origin so that we can render the HTML code from untrusted sources safely. Also fix a bug in the image tracker. It should not try to communicate with the view if the view has gone away (which was the whole point of the image tracker...) BUG=None TEST=Install the extension, browse to a page with a feed and click onthe rss icon in the Omnibox. An interstitial page should appear with a preview of the feed. Review URL: http://codereview.chromium.org/155180 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20316 0039d316-1c4b-4281-b951-d872f2087c98
* Make the API to open a message channel symmetric, so it works the same ↵mpcomplete@chromium.org2009-07-096-162/+222
| | | | | | | | | | | | | | | whether opening from a tab or extension. Also, move the callback handling back to extension_process_bindings, since I didn't need it in event_bindings to implement this, and it didn't make sense there anyway. BUG=12461 TEST=no Review URL: http://codereview.chromium.org/149237 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20296 0039d316-1c4b-4281-b951-d872f2087c98
* ExtensionsServiceBackend::GarbageCollectionExtensions() makes a local copy ↵rafaelw@chromium.org2009-07-092-9/+4
| | | | | | | | | | | | of install_directory_. It was forcing the persistent copy to an absolute path which was causing the ExternsionsService and ExtensionsPrefs install_directory_ values to diverge. Re-enable ExternalInstallPref on mac. TBR=mpcomplete Review URL: http://codereview.chromium.org/155187 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20214 0039d316-1c4b-4281-b951-d872f2087c98
* DevTools: remove extensions-related workaround from the docked devtools ↵pfeldman@chromium.org2009-07-081-1/+13
| | | | | | | | window destruction. Review URL: http://codereview.chromium.org/155206 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20139 0039d316-1c4b-4281-b951-d872f2087c98