Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(312)

Issue 1413853005: Track all extension frames in ProcessManager, inspect extensionoptions (Closed)

Created:
5 years, 1 month ago by robwu
Modified:
5 years ago
CC:
chromium-reviews, chromium-apps-reviews_chromium.org, extensions-reviews_chromium.org
Base URL:
https://chromium.googlesource.com/chromium/src.git@master
Target Ref:
refs/pending/heads/master
Project:
chromium
Visibility:
Public.

Description

Track all extension frames in ProcessManager, inspect extensionoptions ProcessManager::GetRenderFrameHostsForExtension did not return all RFHs for a given extension, because of two errors: 1. An extension can have multiple SiteInstances, so SiteInstances should not be compared by pointer. 2. ExtensionWebContentsObserver failed to register RFHs after a process swap. I discovered this when I noticed that tests started to fail unexpectedly after applying https://codereview.chromium.org/1413543005. That patch changes the extension messaging API, to route messages to RFHs instead of processes. This requires extension frames to be tracked correctly... Extension tabs, frames, etc. are now visible at "Inspect views" in the extensions view (when developer mode is enabled), thanks to the fact that all extension frames are now being tracked (excluding extension frames that are hosted in a view without classification, e.g. developer tools and most of the GuestViews). BUG=432875, 550022 CQ_INCLUDE_TRYBOTS=tryserver.chromium.linux:linux_site_isolation TEST=ExtensionApiTest.MessagingNoBackground does not fail any more with https://codereview.chromium.org/1413543005 after applying this patch. DeveloperPrivateApiTest.InspectEmbeddedOptionsPage passes. ProcessManagerBrowserTest.NoBackgroundPage passes. ProcessManagerBrowserTest.FrameClassification passes with and without OOPIF. Committed: https://crrev.com/cdcc4b87e40c1b783541444d9484f33e81a177ba Cr-Commit-Position: refs/heads/master@{#363368}

Patch Set 1 #

Patch Set 2 : rebase #

Total comments: 21

Patch Set 3 : fix nits, fix failing tests (related to crbug.com/550022) #

Patch Set 4 : s/msg/message/ #

Total comments: 11

Patch Set 5 : Explain purpose of RenderFrameHostChanged #

Patch Set 6 : Add ProcessManagerBrowserTest.NoBackgroundPage test #

Patch Set 7 : Add ProcessManagerObserver::OnExtensionFrameNavigated notification #

Total comments: 10

Patch Set 8 : Only register extension frames + tests #

Patch Set 9 : rebase #

Patch Set 10 : include extension_process_policy.h #

Total comments: 21

Patch Set 11 : Nits, treat hosted apps as extensions, no test flakiness #

Total comments: 33

Patch Set 12 : nits + sandbox tests #

Patch Set 13 : rebase #

Patch Set 14 : nits, git cl format, fix error in ExtensionWebContentsObserver::GetExtensionFromFrame, exclude kGue… #

Total comments: 19

Patch Set 15 : more nits, free of compiler errors #

Patch Set 16 : Add comments that I forgot to commit in patch set 15 #

Patch Set 17 : Remove DCHECK and update comment (assumption was incorrect) #

Patch Set 18 : Update DCHECK to avoid getting hit in DriveFirstRunTest. #

Patch Set 19 : Cleanup + remove DCHECK #

Unified diffs Side-by-side diffs Delta from patch set Stats (+640 lines, -48 lines) Patch
M chrome/browser/extensions/api/developer_private/developer_private_apitest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 2 chunks +50 lines, -0 lines 0 comments Download
M chrome/browser/extensions/api/developer_private/inspectable_views_finder.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 2 chunks +7 lines, -2 lines 0 comments Download
M chrome/browser/extensions/chrome_extensions_browser_client.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 1 chunk +2 lines, -0 lines 0 comments Download
M chrome/browser/extensions/extension_messages_apitest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 1 chunk +8 lines, -0 lines 0 comments Download
M chrome/browser/extensions/process_manager_browsertest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 2 chunks +347 lines, -1 line 0 comments Download
M chrome/browser/speech/chrome_speech_recognition_manager_delegate.cc View 1 2 1 chunk +1 line, -0 lines 0 comments Download
M chrome/common/extensions/api/developer_private.idl View 1 2 3 4 5 6 7 8 9 10 11 12 13 1 chunk +1 line, -0 lines 0 comments Download
A + chrome/test/data/extensions/api_test/messaging/connect_nobackground/contentscript.js View 1 2 3 4 5 6 7 8 1 chunk +6 lines, -7 lines 0 comments Download
A chrome/test/data/extensions/api_test/messaging/connect_nobackground/manifest.json View 1 chunk +10 lines, -0 lines 0 comments Download
A + chrome/test/data/extensions/api_test/messaging/connect_nobackground/page_in_main_frame.html View 1 2 3 4 5 6 7 8 1 chunk +1 line, -2 lines 0 comments Download
A chrome/test/data/extensions/api_test/messaging/connect_nobackground/test.js View 1 2 1 chunk +35 lines, -0 lines 0 comments Download
M extensions/browser/extension_web_contents_observer.h View 1 2 3 4 5 6 7 8 9 10 11 3 chunks +29 lines, -1 line 0 comments Download
M extensions/browser/extension_web_contents_observer.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 4 chunks +88 lines, -23 lines 0 comments Download
M extensions/browser/guest_view/extension_options/extension_options_guest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 2 chunks +4 lines, -1 line 0 comments Download
M extensions/browser/process_manager.h View 1 2 3 4 5 6 7 2 chunks +3 lines, -0 lines 0 comments Download
M extensions/browser/process_manager.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 3 chunks +23 lines, -8 lines 0 comments Download
M extensions/browser/process_manager_observer.h View 1 2 3 4 5 6 1 chunk +8 lines, -0 lines 0 comments Download
M extensions/common/view_type.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 1 chunk +1 line, -0 lines 0 comments Download
M extensions/renderer/extension_frame_helper.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 3 chunks +16 lines, -3 lines 0 comments Download

Messages

Total messages: 67 (21 generated)
robwu
5 years, 1 month ago (2015-10-29 23:54:15 UTC) #2
Devlin
+Nick (content guru). Please look at ExtensionWebContentsObserver and ProcessManager comments. https://codereview.chromium.org/1413853005/diff/20001/chrome/test/data/extensions/api_test/messaging/connect_nobackground/contentscript.js File chrome/test/data/extensions/api_test/messaging/connect_nobackground/contentscript.js (right): https://codereview.chromium.org/1413853005/diff/20001/chrome/test/data/extensions/api_test/messaging/connect_nobackground/contentscript.js#newcode1 ...
5 years, 1 month ago (2015-10-30 01:21:44 UTC) #4
ncarter (slow)
https://codereview.chromium.org/1413853005/diff/20001/extensions/browser/extension_web_contents_observer.cc File extensions/browser/extension_web_contents_observer.cc (right): https://codereview.chromium.org/1413853005/diff/20001/extensions/browser/extension_web_contents_observer.cc#newcode117 extensions/browser/extension_web_contents_observer.cc:117: InitializeRenderFrame(new_host); Does your test really fail if you don't ...
5 years, 1 month ago (2015-10-30 06:22:20 UTC) #5
robwu
https://codereview.chromium.org/1413853005/diff/20001/chrome/test/data/extensions/api_test/messaging/connect_nobackground/contentscript.js File chrome/test/data/extensions/api_test/messaging/connect_nobackground/contentscript.js (right): https://codereview.chromium.org/1413853005/diff/20001/chrome/test/data/extensions/api_test/messaging/connect_nobackground/contentscript.js#newcode9 chrome/test/data/extensions/api_test/messaging/connect_nobackground/contentscript.js:9: chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) { On 2015/10/30 01:21:43, Devlin wrote: ...
5 years, 1 month ago (2015-10-30 10:15:50 UTC) #6
ncarter (slow)
https://codereview.chromium.org/1413853005/diff/20001/extensions/browser/extension_web_contents_observer.cc File extensions/browser/extension_web_contents_observer.cc (right): https://codereview.chromium.org/1413853005/diff/20001/extensions/browser/extension_web_contents_observer.cc#newcode117 extensions/browser/extension_web_contents_observer.cc:117: InitializeRenderFrame(new_host); On 2015/10/30 10:15:49, robwu wrote: > On 2015/10/30 ...
5 years, 1 month ago (2015-10-30 15:53:44 UTC) #7
Devlin
https://codereview.chromium.org/1413853005/diff/20001/chrome/test/data/extensions/api_test/messaging/connect_nobackground/contentscript.js File chrome/test/data/extensions/api_test/messaging/connect_nobackground/contentscript.js (right): https://codereview.chromium.org/1413853005/diff/20001/chrome/test/data/extensions/api_test/messaging/connect_nobackground/contentscript.js#newcode9 chrome/test/data/extensions/api_test/messaging/connect_nobackground/contentscript.js:9: chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) { On 2015/10/30 10:15:49, robwu wrote: ...
5 years, 1 month ago (2015-10-30 16:03:51 UTC) #8
robwu
https://codereview.chromium.org/1413853005/diff/20001/extensions/browser/process_manager.cc File extensions/browser/process_manager.cc (left): https://codereview.chromium.org/1413853005/diff/20001/extensions/browser/process_manager.cc#oldcode334 extensions/browser/process_manager.cc:334: if (key_value.first->GetSiteInstance() == site_instance) On 2015/10/30 15:53:44, ncarter wrote: ...
5 years, 1 month ago (2015-10-30 23:02:44 UTC) #9
robwu
Fady: Could you take a look at the <extensionoptions> changes? Previously <extensionoptions> was not visible ...
5 years, 1 month ago (2015-11-01 20:22:35 UTC) #11
Fady Samuel
https://codereview.chromium.org/1413853005/diff/60001/extensions/browser/guest_view/extension_options/extension_options_guest.cc File extensions/browser/guest_view/extension_options/extension_options_guest.cc (right): https://codereview.chromium.org/1413853005/diff/60001/extensions/browser/guest_view/extension_options/extension_options_guest.cc#newcode113 extensions/browser/guest_view/extension_options/extension_options_guest.cc:113: SetViewType(wc, VIEW_TYPE_EXTENSION_OPTIONS); This seems incomplete? What about other GuestView ...
5 years, 1 month ago (2015-11-01 21:53:29 UTC) #13
Fady Samuel
https://codereview.chromium.org/1413853005/diff/60001/extensions/browser/guest_view/extension_options/extension_options_guest.cc File extensions/browser/guest_view/extension_options/extension_options_guest.cc (right): https://codereview.chromium.org/1413853005/diff/60001/extensions/browser/guest_view/extension_options/extension_options_guest.cc#newcode113 extensions/browser/guest_view/extension_options/extension_options_guest.cc:113: SetViewType(wc, VIEW_TYPE_EXTENSION_OPTIONS); On 2015/11/01 21:53:29, Fady Samuel wrote: > ...
5 years, 1 month ago (2015-11-01 22:09:55 UTC) #14
ncarter (slow)
https://codereview.chromium.org/1413853005/diff/60001/extensions/browser/extension_web_contents_observer.cc File extensions/browser/extension_web_contents_observer.cc (right): https://codereview.chromium.org/1413853005/diff/60001/extensions/browser/extension_web_contents_observer.cc#newcode122 extensions/browser/extension_web_contents_observer.cc:122: void ExtensionWebContentsObserver::RenderFrameHostChanged( If you are listening for changes to ...
5 years, 1 month ago (2015-11-02 17:36:20 UTC) #15
robwu
https://codereview.chromium.org/1413853005/diff/60001/extensions/browser/extension_web_contents_observer.cc File extensions/browser/extension_web_contents_observer.cc (right): https://codereview.chromium.org/1413853005/diff/60001/extensions/browser/extension_web_contents_observer.cc#newcode122 extensions/browser/extension_web_contents_observer.cc:122: void ExtensionWebContentsObserver::RenderFrameHostChanged( On 2015/11/02 17:36:20, ncarter wrote: > If ...
5 years, 1 month ago (2015-11-02 22:50:41 UTC) #16
Charlie Reis
On 2015/11/01 20:22:35, robwu wrote: > Charlie: > I changed the logic of ProcessManager::GetAllFrames to ...
5 years, 1 month ago (2015-11-03 06:45:15 UTC) #17
ncarter (slow)
https://codereview.chromium.org/1413853005/diff/60001/extensions/browser/extension_web_contents_observer.cc File extensions/browser/extension_web_contents_observer.cc (right): https://codereview.chromium.org/1413853005/diff/60001/extensions/browser/extension_web_contents_observer.cc#newcode122 extensions/browser/extension_web_contents_observer.cc:122: void ExtensionWebContentsObserver::RenderFrameHostChanged( On 2015/11/02 22:50:41, robwu wrote: > On ...
5 years, 1 month ago (2015-11-03 23:32:02 UTC) #18
robwu
https://codereview.chromium.org/1413853005/diff/60001/extensions/browser/extension_web_contents_observer.cc File extensions/browser/extension_web_contents_observer.cc (right): https://codereview.chromium.org/1413853005/diff/60001/extensions/browser/extension_web_contents_observer.cc#newcode122 extensions/browser/extension_web_contents_observer.cc:122: void ExtensionWebContentsObserver::RenderFrameHostChanged( On 2015/11/03 23:32:02, ncarter wrote: > On ...
5 years, 1 month ago (2015-11-04 00:34:02 UTC) #19
robwu
I've added more tests, and also a new notification (ProcessManagerObserver::OnExtensionFrameNavigated) so that I can detect ...
5 years, 1 month ago (2015-11-04 23:52:23 UTC) #21
ncarter (slow)
https://codereview.chromium.org/1413853005/diff/120001/chrome/browser/extensions/process_manager_browsertest.cc File chrome/browser/extensions/process_manager_browsertest.cc (right): https://codereview.chromium.org/1413853005/diff/120001/chrome/browser/extensions/process_manager_browsertest.cc#newcode160 chrome/browser/extensions/process_manager_browsertest.cc:160: IN_PROC_BROWSER_TEST_F(ProcessManagerBrowserTest, NoBackgroundPage) { I uploaded a test that works ...
5 years, 1 month ago (2015-11-05 20:03:23 UTC) #22
robwu
Nick, I have significantly changed the frame registration logic + added passing tests (which failed ...
5 years, 1 month ago (2015-11-12 00:33:58 UTC) #23
ncarter (slow)
https://codereview.chromium.org/1413853005/diff/180001/chrome/browser/extensions/process_manager_browsertest.cc File chrome/browser/extensions/process_manager_browsertest.cc (right): https://codereview.chromium.org/1413853005/diff/180001/chrome/browser/extensions/process_manager_browsertest.cc#newcode90 chrome/browser/extensions/process_manager_browsertest.cc:90: EXPECT_TRUE(is_loaded); I had a chat with creis, and we'd ...
5 years, 1 month ago (2015-11-24 05:22:13 UTC) #24
robwu
https://codereview.chromium.org/1413853005/diff/180001/chrome/browser/extensions/process_manager_browsertest.cc File chrome/browser/extensions/process_manager_browsertest.cc (right): https://codereview.chromium.org/1413853005/diff/180001/chrome/browser/extensions/process_manager_browsertest.cc#newcode90 chrome/browser/extensions/process_manager_browsertest.cc:90: EXPECT_TRUE(is_loaded); On 2015/11/24 05:22:13, ncarter wrote: > I had ...
5 years ago (2015-11-25 00:44:17 UTC) #25
robwu
Ping nick.
5 years ago (2015-11-30 14:07:36 UTC) #26
ncarter (slow)
lgtm https://codereview.chromium.org/1413853005/diff/180001/chrome/browser/extensions/process_manager_browsertest.cc File chrome/browser/extensions/process_manager_browsertest.cc (right): https://codereview.chromium.org/1413853005/diff/180001/chrome/browser/extensions/process_manager_browsertest.cc#newcode402 chrome/browser/extensions/process_manager_browsertest.cc:402: EXPECT_EQ(1u, pm->GetRenderFrameHostsForExtension(extension1->id()).size()); On 2015/11/25 00:44:16, robwu wrote: > ...
5 years ago (2015-11-30 22:56:46 UTC) #27
robwu
Devlin, could you review the CL, and pay attention to the ProcessManager and ExtensionWebContentsObserver? https://codereview.chromium.org/1413853005/diff/180001/extensions/browser/extension_web_contents_observer.cc ...
5 years ago (2015-12-01 00:45:26 UTC) #28
Devlin
https://codereview.chromium.org/1413853005/diff/200001/chrome/browser/extensions/api/developer_private/developer_private_apitest.cc File chrome/browser/extensions/api/developer_private/developer_private_apitest.cc (right): https://codereview.chromium.org/1413853005/diff/200001/chrome/browser/extensions/api/developer_private/developer_private_apitest.cc#newcode91 chrome/browser/extensions/api/developer_private/developer_private_apitest.cc:91: LoadExtension(dir.AppendASCII("extensions/delayed_install/v1")); nit: typically prefer .AppendASCII rather than platform-specific separators. ...
5 years ago (2015-12-01 00:58:20 UTC) #29
robwu
I've fixed the nits. Devlin: Your previous review is based on an old patch set, ...
5 years ago (2015-12-01 17:19:57 UTC) #30
ncarter (slow)
https://codereview.chromium.org/1413853005/diff/260001/extensions/browser/extension_web_contents_observer.cc File extensions/browser/extension_web_contents_observer.cc (right): https://codereview.chromium.org/1413853005/diff/260001/extensions/browser/extension_web_contents_observer.cc#newcode241 extensions/browser/extension_web_contents_observer.cc:241: url::Origin(site_url)) && I think this works only because extension ...
5 years ago (2015-12-01 17:51:42 UTC) #31
Devlin
https://codereview.chromium.org/1413853005/diff/260001/chrome/browser/extensions/api/developer_private/inspectable_views_finder.cc File chrome/browser/extensions/api/developer_private/inspectable_views_finder.cc (right): https://codereview.chromium.org/1413853005/diff/260001/chrome/browser/extensions/api/developer_private/inspectable_views_finder.cc#newcode156 chrome/browser/extensions/api/developer_private/inspectable_views_finder.cc:156: host_type == VIEW_TYPE_APP_WINDOW) { Why don't we want to ...
5 years ago (2015-12-01 21:40:49 UTC) #32
robwu
https://codereview.chromium.org/1413853005/diff/200001/chrome/browser/extensions/process_manager_browsertest.cc File chrome/browser/extensions/process_manager_browsertest.cc (right): https://codereview.chromium.org/1413853005/diff/200001/chrome/browser/extensions/process_manager_browsertest.cc#newcode169 chrome/browser/extensions/process_manager_browsertest.cc:169: std::vector<scoped_ptr<TestExtensionDir>> temp_dirs_; On 2015/12/01 00:58:20, Devlin wrote: > nit: ...
5 years ago (2015-12-01 23:19:58 UTC) #33
Devlin
lgtm if Nick's happy. https://codereview.chromium.org/1413853005/diff/260001/chrome/browser/extensions/api/developer_private/inspectable_views_finder.cc File chrome/browser/extensions/api/developer_private/inspectable_views_finder.cc (right): https://codereview.chromium.org/1413853005/diff/260001/chrome/browser/extensions/api/developer_private/inspectable_views_finder.cc#newcode156 chrome/browser/extensions/api/developer_private/inspectable_views_finder.cc:156: host_type == VIEW_TYPE_APP_WINDOW) { On ...
5 years ago (2015-12-01 23:29:58 UTC) #34
robwu
https://codereview.chromium.org/1413853005/diff/260001/chrome/browser/extensions/process_manager_browsertest.cc File chrome/browser/extensions/process_manager_browsertest.cc (right): https://codereview.chromium.org/1413853005/diff/260001/chrome/browser/extensions/process_manager_browsertest.cc#newcode109 chrome/browser/extensions/process_manager_browsertest.cc:109: "<iframe id=bgframe src=empty.html></iframe>"); On 2015/12/01 23:29:58, Devlin wrote: > ...
5 years ago (2015-12-01 23:51:22 UTC) #35
robwu
+tommi for OWNER stamp There is only one extra line in chrome/browser/speech/chrome_speech_recognition_manager_delegate.cc, trivial to review.
5 years ago (2015-12-01 23:52:18 UTC) #37
Devlin
On 2015/12/01 23:51:22, robwu wrote: > Apologies, I forgot to commit it. Try again. Still ...
5 years ago (2015-12-01 23:52:45 UTC) #38
tommi (sloooow) - chröme
lgtm for chrome_speech_recognition_manager_delegate.cc
5 years ago (2015-12-02 08:32:00 UTC) #39
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1413853005/320001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1413853005/320001
5 years ago (2015-12-02 10:29:05 UTC) #42
commit-bot: I haz the power
Try jobs failed on following builders: linux_chromium_chromeos_rel_ng on tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_chromeos_rel_ng/builds/136824)
5 years ago (2015-12-02 11:36:12 UTC) #44
robwu
Devlin, I did 2 amall changes: 1) Removed 2 DCHECKs. 2) Changed frame filter logic ...
5 years ago (2015-12-05 00:39:40 UTC) #48
Devlin
Dang. At one point, I tried to make sure that every WebContents had an assigned ...
5 years ago (2015-12-05 00:57:24 UTC) #49
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1413853005/420001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1413853005/420001
5 years ago (2015-12-05 00:59:27 UTC) #52
commit-bot: I haz the power
Try jobs failed on following builders: win8_chromium_ng on tryserver.chromium.win (JOB_TIMED_OUT, no build URL) win_chromium_compile_dbg_ng on ...
5 years ago (2015-12-05 01:47:11 UTC) #54
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1413853005/420001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1413853005/420001
5 years ago (2015-12-05 09:43:11 UTC) #56
commit-bot: I haz the power
Try jobs failed on following builders: win8_chromium_ng on tryserver.chromium.win (JOB_TIMED_OUT, no build URL) win_chromium_compile_dbg_ng on ...
5 years ago (2015-12-05 11:43:55 UTC) #58
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1413853005/420001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1413853005/420001
5 years ago (2015-12-05 20:35:07 UTC) #60
commit-bot: I haz the power
Try jobs failed on following builders: win8_chromium_ng on tryserver.chromium.win (JOB_TIMED_OUT, no build URL) win_chromium_compile_dbg_ng on ...
5 years ago (2015-12-05 22:36:28 UTC) #62
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1413853005/420001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1413853005/420001
5 years ago (2015-12-06 10:51:25 UTC) #64
commit-bot: I haz the power
Committed patchset #19 (id:420001)
5 years ago (2015-12-06 12:39:55 UTC) #65
commit-bot: I haz the power
5 years ago (2015-12-06 12:40:38 UTC) #67
Message was sent while issue was closed.
Patchset 19 (id:??) landed as
https://crrev.com/cdcc4b87e40c1b783541444d9484f33e81a177ba
Cr-Commit-Position: refs/heads/master@{#363368}

Powered by Google App Engine
This is Rietveld 408576698