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

Issue 10831116: Move SessionStorageNamespace entirely into NavigationController and support StoragePartitions. (Closed)

Created:
8 years, 4 months ago by awong
Modified:
8 years, 4 months ago
CC:
chromium-reviews, sadrul, nkostylev+watch_chromium.org, tburkard+watch_chromium.org, jeremya+watch_chromium.org, gideonwald, dcheng, Dmitry Titov, ajwong+watch_chromium.org, stevenjb+watch_chromium.org, Shishir, joi+watch-content_chromium.org, cbentzel+watch_chromium.org, ben+watch_chromium.org, jam, dominich, marja+watch_chromium.org, darin-cc_chromium.org, brettw-cc_chromium.org, gbillock+watch_chromium.org, Avi (use Gerrit), jennb, creis+watch_chromium.org, jianli, gavinp+prer_chromium.org, oshima+watch_chromium.org, Jered, mihaip-chromium-reviews_chromium.org, tfarina, sreeram, Aaron Boodman, dominich+watch_chromium.org, David Black, davemoore+watch_chromium.org, smckay+watch_chromium.org, mmenke, nasko
Visibility:
Public.

Description

Move SessionStorageNamespace entirely into NavigationController and support StoragePartitions. Previously, WebContents, NavigationController, and RenderViewHost all exposed APIs that allowed one to retrieve the SessionStorageNamespace associated with them. This is confusing because there were too many ways to access the object. After this change, the SessionStorageNamespace is only exposed by the NavigationController. Conceptually a SessionStorageNamespace belongs to a WebContents but we store it in NavigationController because on tab duplication, the NavigationController becomes the authoritative state of the tab. Also, to support StoragePartitions, the NavigationController now maintains a map of partition_id -> SessionStorageNamespace. Someone requesting a SessionStorageNamespace must either know which StoragePartition they are coming from, or which child process they are acting on behalf of. This change also changes the way TabContents and WebContents are created. 1) We now have explicitly separate creation methods for prepopulating with SessionStorage and creating with an opener. 2) Some of the WebContentImpl construct has been moved into an Init() function to avoid accidental calls to virtual functions by subobjects. TBR-ing all the directories where I just remove a NULL. TBR=sky,stevenjb,dominich,brettw,satorux,kalman BUG=85121 Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=151379

Patch Set 1 #

Patch Set 2 : Add some rudimentary testing. #

Total comments: 3

Patch Set 3 : Fix content shell #

Total comments: 37

Patch Set 4 : address charlie's comment #

Patch Set 5 : Address comments and add unittest. Now it works for realz. #

Patch Set 6 : mac win compile fixes #

Total comments: 13

Patch Set 7 : Address Charlie's comments and fix crashes. #

Patch Set 8 : silly compiler. do what I mean, not what I write! #

Patch Set 9 : another compile error #

Patch Set 10 : fix mac build, interstitial, and make isolated apps test more robust. #

Patch Set 11 : merged #

Patch Set 12 : another mac fix #

Patch Set 13 : fix crahses caused by new CHECKS() and disable PlatformAppsBrowserTest.OpenLink...you'd think that'… #

Patch Set 14 : merged to ToT #

Patch Set 15 : fix android build. #

Patch Set 16 : !@#$##@! #

Patch Set 17 : reintroduce default sessionstorage namespace for migration. grrr. #

Patch Set 18 : style fixes. #

Total comments: 10

Patch Set 19 : reabase for fixing instant. #

Total comments: 1

Patch Set 20 : Use seeram's suggestion to do parallel iteration. #

Patch Set 21 : fix interstitial #

Patch Set 22 : merged #

Total comments: 4

Patch Set 23 : address creis@'s comments #

Patch Set 24 : merged ToT #

Unified diffs Side-by-side diffs Delta from patch set Stats (+916 lines, -413 lines) Patch
M chrome/browser/chrome_content_browser_client.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 3 chunks +16 lines, -0 lines 0 comments Download
M chrome/browser/chrome_content_browser_client.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2 chunks +61 lines, -9 lines 0 comments Download
M chrome/browser/chromeos/login/simple_web_view_dialog.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 chunk +0 lines, -1 line 0 comments Download
M chrome/browser/chromeos/login/webui_login_view.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 chunk +0 lines, -1 line 0 comments Download
M chrome/browser/debugger/devtools_window.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 2 chunks +1 line, -2 lines 0 comments Download
M chrome/browser/extensions/api/identity/web_auth_flow.cc View 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/extensions/api/offscreen_tabs/offscreen_tabs_api.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/extensions/extension_host.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/extensions/isolated_app_browsertest.cc View 1 2 3 4 5 6 7 8 9 5 chunks +98 lines, -33 lines 0 comments Download
M chrome/browser/geolocation/chrome_geolocation_permission_context_unittest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/instant/instant_controller.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 1 chunk +21 lines, -3 lines 0 comments Download
M chrome/browser/instant/instant_loader.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 chunk +6 lines, -5 lines 0 comments Download
M chrome/browser/notifications/balloon_host.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 1 chunk +0 lines, -1 line 0 comments Download
M chrome/browser/predictors/autocomplete_action_predictor.h View 2 chunks +2 lines, -1 line 0 comments Download
M chrome/browser/predictors/autocomplete_action_predictor.cc View 1 2 3 4 5 6 1 chunk +6 lines, -1 line 0 comments Download
M chrome/browser/prerender/prerender_browsertest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 chunk +2 lines, -2 lines 0 comments Download
M chrome/browser/prerender/prerender_contents.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 2 chunks +12 lines, -4 lines 0 comments Download
M chrome/browser/prerender/prerender_manager.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 2 chunks +10 lines, -4 lines 0 comments Download
M chrome/browser/sessions/session_restore_android.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/sessions/session_restore_browsertest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 1 chunk +8 lines, -8 lines 0 comments Download
M chrome/browser/sessions/session_service.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 3 chunks +9 lines, -3 lines 0 comments Download
M chrome/browser/sessions/tab_restore_service.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 chunk +3 lines, -1 line 0 comments Download
M chrome/browser/tab_contents/background_contents.cc View 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/ui/browser_browsertest.cc View 2 chunks +2 lines, -2 lines 0 comments Download
M chrome/browser/ui/browser_navigator.cc View 1 chunk +1 line, -2 lines 0 comments Download
M chrome/browser/ui/browser_navigator_browsertest.cc View 1 chunk +1 line, -2 lines 0 comments Download
M chrome/browser/ui/browser_tab_strip_model_delegate.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/ui/browser_tabrestore.cc View 1 2 3 3 chunks +20 lines, -5 lines 0 comments Download
M chrome/browser/ui/browser_tabstrip.h View 1 2 3 4 3 chunks +17 lines, -3 lines 0 comments Download
M chrome/browser/ui/browser_tabstrip.cc View 1 2 3 1 chunk +19 lines, -7 lines 0 comments Download
M chrome/browser/ui/cocoa/fullscreen_exit_bubble_controller_unittest.mm View 1 2 3 4 5 6 7 8 9 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/ui/cocoa/infobars/infobar_controller_unittest.mm View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2 chunks +2 lines, -2 lines 0 comments Download
M chrome/browser/ui/cocoa/infobars/translate_infobar_unittest.mm View 1 2 3 4 5 6 7 8 9 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/ui/cocoa/tabpose_window_unittest.mm View 1 2 3 4 5 6 7 8 9 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/ui/cocoa/tabs/tab_strip_controller_unittest.mm View 1 2 3 4 5 6 7 8 9 2 chunks +3 lines, -3 lines 0 comments Download
M chrome/browser/ui/cocoa/web_dialog_window_controller.mm View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/ui/cocoa/web_intent_picker_cocoa.mm View 1 2 3 4 5 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/ui/extensions/shell_window.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/ui/gtk/web_dialog_gtk.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/ui/gtk/web_intent_picker_gtk.cc View 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/ui/intents/web_intent_inline_disposition_delegate_unittest.cc View 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/ui/intents/web_intent_picker_controller.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/ui/omnibox/omnibox_edit_model.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 chunk +2 lines, -2 lines 0 comments Download
M chrome/browser/ui/panels/panel_host.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/ui/tabs/tab_strip_model.cc View 1 chunk +1 line, -2 lines 0 comments Download
M chrome/browser/ui/tabs/tab_strip_model_unittest.cc View 2 chunks +3 lines, -4 lines 0 comments Download
M chrome/browser/ui/views/ash/panel_view_aura.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/ui/views/external_tab_container_win.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/ui/views/web_intent_picker_views.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 chunk +1 line, -1 line 0 comments Download
M chrome/browser/ui/webui/constrained_web_dialog_delegate_base.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 chunk +1 line, -1 line 0 comments Download
M content/browser/browser_context.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 3 chunks +17 lines, -3 lines 0 comments Download
M content/browser/browser_plugin/old/old_browser_plugin_host.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 chunk +6 lines, -8 lines 0 comments Download
M content/browser/dom_storage/session_storage_namespace_impl.h View 1 2 3 2 chunks +5 lines, -1 line 0 comments Download
M content/browser/dom_storage/session_storage_namespace_impl.cc View 1 chunk +5 lines, -0 lines 0 comments Download
M content/browser/renderer_host/render_message_filter.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 2 chunks +4 lines, -4 lines 0 comments Download
M content/browser/renderer_host/render_view_host_impl.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 6 chunks +7 lines, -12 lines 0 comments Download
M content/browser/renderer_host/render_view_host_impl.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 3 chunks +1 line, -14 lines 0 comments Download
M content/browser/renderer_host/render_view_host_unittest.cc View 1 chunk +1 line, -1 line 0 comments Download
M content/browser/renderer_host/test_render_view_host.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 3 chunks +19 lines, -1 line 0 comments Download
M content/browser/site_instance_impl_unittest.cc View 1 1 chunk +3 lines, -2 lines 0 comments Download
M content/browser/web_contents/interstitial_page_impl.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 4 chunks +24 lines, -3 lines 0 comments Download
M content/browser/web_contents/navigation_controller_impl.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 6 chunks +29 lines, -6 lines 0 comments Download
M content/browser/web_contents/navigation_controller_impl.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 7 chunks +67 lines, -11 lines 0 comments Download
M content/browser/web_contents/navigation_controller_impl_unittest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 10 chunks +35 lines, -17 lines 0 comments Download
M content/browser/web_contents/render_view_host_manager.cc View 1 2 3 4 2 chunks +4 lines, -2 lines 0 comments Download
M content/browser/web_contents/render_view_host_manager_unittest.cc View 9 chunks +52 lines, -35 lines 0 comments Download
M content/browser/web_contents/test_web_contents.h View 1 2 3 2 chunks +7 lines, -1 line 0 comments Download
M content/browser/web_contents/test_web_contents.cc View 3 chunks +12 lines, -8 lines 0 comments Download
M content/browser/web_contents/web_contents_delegate_unittest.cc View 1 1 chunk +4 lines, -4 lines 0 comments Download
M content/browser/web_contents/web_contents_impl.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 6 chunks +36 lines, -22 lines 0 comments Download
M content/browser/web_contents/web_contents_impl.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 13 chunks +121 lines, -72 lines 0 comments Download
M content/browser/web_contents/web_contents_impl_unittest.cc View 5 chunks +23 lines, -23 lines 0 comments Download
M content/public/browser/browser_context.h View 1 chunk +2 lines, -0 lines 0 comments Download
M content/public/browser/content_browser_client.h View 1 2 3 4 5 6 1 chunk +15 lines, -0 lines 0 comments Download
M content/public/browser/content_browser_client.cc View 1 2 3 4 1 chunk +15 lines, -1 line 0 comments Download
M content/public/browser/navigation_controller.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 3 chunks +15 lines, -2 lines 0 comments Download
M content/public/browser/render_view_host.h View 1 chunk +0 lines, -2 lines 0 comments Download
M content/public/browser/web_contents.h View 1 2 3 4 3 chunks +18 lines, -8 lines 0 comments Download
M content/shell/shell.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1 chunk +1 line, -2 lines 0 comments Download
M content/test/test_renderer_host.cc View 1 chunk +1 line, -1 line 0 comments Download
M content/test/web_contents_tester.cc View 3 chunks +14 lines, -11 lines 0 comments Download
M ui/views/controls/webview/webview.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 1 chunk +0 lines, -1 line 0 comments Download
M webkit/dom_storage/dom_storage_session.h View 1 chunk +1 line, -0 lines 0 comments Download
M webkit/dom_storage/dom_storage_session.cc View 1 chunk +4 lines, -0 lines 0 comments Download

Messages

Total messages: 23 (0 generated)
awong
Privatizing constructors for fun an profit! The interesting changes are in WebContentsImpl and NavigationControllerImpl. Most ...
8 years, 4 months ago (2012-08-01 22:28:35 UTC) #1
dominich
https://chromiumcodereview.appspot.com/10831116/diff/2001/chrome/browser/predictors/autocomplete_action_predictor.cc File chrome/browser/predictors/autocomplete_action_predictor.cc (right): https://chromiumcodereview.appspot.com/10831116/diff/2001/chrome/browser/predictors/autocomplete_action_predictor.cc#newcode168 chrome/browser/predictors/autocomplete_action_predictor.cc:168: content::SessionStorageNamespaceMap::const_iterator it = drive-by: If this is done a ...
8 years, 4 months ago (2012-08-01 22:59:26 UTC) #2
awong
https://chromiumcodereview.appspot.com/10831116/diff/2001/chrome/browser/predictors/autocomplete_action_predictor.cc File chrome/browser/predictors/autocomplete_action_predictor.cc (right): https://chromiumcodereview.appspot.com/10831116/diff/2001/chrome/browser/predictors/autocomplete_action_predictor.cc#newcode168 chrome/browser/predictors/autocomplete_action_predictor.cc:168: content::SessionStorageNamespaceMap::const_iterator it = On 2012/08/01 22:59:26, dominich wrote: > ...
8 years, 4 months ago (2012-08-01 23:37:55 UTC) #3
Charlie Reis
This mostly looks good. I think it's an improvement to have more explicit ways to ...
8 years, 4 months ago (2012-08-02 23:06:47 UTC) #4
sreeram
https://chromiumcodereview.appspot.com/10831116/diff/2002/chrome/browser/instant/instant_loader.cc File chrome/browser/instant/instant_loader.cc (right): https://chromiumcodereview.appspot.com/10831116/diff/2002/chrome/browser/instant/instant_loader.cc#newcode99 chrome/browser/instant/instant_loader.cc:99: // but instead I will whack it in a ...
8 years, 4 months ago (2012-08-02 23:44:42 UTC) #5
awong
Addressed most comments. The one about creating the process too early, I wasn't sure how ...
8 years, 4 months ago (2012-08-03 00:31:03 UTC) #6
Charlie Reis
Two quick comments, then I'll do another pass. https://chromiumcodereview.appspot.com/10831116/diff/2002/content/browser/web_contents/navigation_controller_impl.cc File content/browser/web_contents/navigation_controller_impl.cc (right): https://chromiumcodereview.appspot.com/10831116/diff/2002/content/browser/web_contents/navigation_controller_impl.cc#newcode1220 content/browser/web_contents/navigation_controller_impl.cc:1220: // ...
8 years, 4 months ago (2012-08-03 22:11:28 UTC) #7
awong
Comments addressed, unittests added, scary comment about all the WithSessionStorage factories added, cause really, don't ...
8 years, 4 months ago (2012-08-04 01:01:32 UTC) #8
Charlie Reis
Mostly nits at this point. This looks good once the tests are working. https://chromiumcodereview.appspot.com/10831116/diff/11006/chrome/browser/chrome_content_browser_client.cc File ...
8 years, 4 months ago (2012-08-06 20:38:30 UTC) #9
awong
YES! WE'RE GREEN! Charlie, I made two non-trivial changes since your last review. Specifically: - ...
8 years, 4 months ago (2012-08-08 18:08:27 UTC) #10
michaeln
http://codereview.chromium.org/10831116/diff/19178/chrome/browser/predictors/autocomplete_action_predictor.cc File chrome/browser/predictors/autocomplete_action_predictor.cc (right): http://codereview.chromium.org/10831116/diff/19178/chrome/browser/predictors/autocomplete_action_predictor.cc#newcode169 chrome/browser/predictors/autocomplete_action_predictor.cc:169: session_storage_namespace_map.find(""); Is the default namespace always the correct answer ...
8 years, 4 months ago (2012-08-08 22:28:52 UTC) #11
michaeln
Also, there's enough moving around in this CL that it probably will have some sort ...
8 years, 4 months ago (2012-08-09 00:22:50 UTC) #12
awong
Thanks for the comments Michael. I think most of them will be addressed in the ...
8 years, 4 months ago (2012-08-09 01:51:43 UTC) #13
sreeram
FYI: I just submitted http://crrev.com/150795, which changes the Instant stuff a lot, so you'll need ...
8 years, 4 months ago (2012-08-09 15:31:25 UTC) #14
awong
Sreeram: I've rebased on top of the current index implementation and "fixed" the code as ...
8 years, 4 months ago (2012-08-09 19:08:05 UTC) #15
sreeram
http://codereview.chromium.org/10831116/diff/169/chrome/browser/instant/instant_controller.cc File chrome/browser/instant/instant_controller.cc (right): http://codereview.chromium.org/10831116/diff/169/chrome/browser/instant/instant_controller.cc#newcode96 chrome/browser/instant/instant_controller.cc:96: session_storage_map2.find(it1->first); Since the map is a std::map, with string ...
8 years, 4 months ago (2012-08-09 19:20:04 UTC) #16
awong
Implemented sreeram's idea.
8 years, 4 months ago (2012-08-10 00:01:21 UTC) #17
sreeram
LGTM for chrome/browser/instant/...
8 years, 4 months ago (2012-08-10 19:04:12 UTC) #18
michaeln
http://codereview.chromium.org/10831116/diff/19178/content/browser/web_contents/interstitial_page_impl.cc File content/browser/web_contents/interstitial_page_impl.cc (right): http://codereview.chromium.org/10831116/diff/19178/content/browser/web_contents/interstitial_page_impl.cc#newcode493 content/browser/web_contents/interstitial_page_impl.cc:493: site_instance); This recipe for getting the default partition and ...
8 years, 4 months ago (2012-08-10 19:54:54 UTC) #19
awong
http://codereview.chromium.org/10831116/diff/19178/content/browser/web_contents/interstitial_page_impl.cc File content/browser/web_contents/interstitial_page_impl.cc (right): http://codereview.chromium.org/10831116/diff/19178/content/browser/web_contents/interstitial_page_impl.cc#newcode493 content/browser/web_contents/interstitial_page_impl.cc:493: site_instance); On 2012/08/10 19:54:55, michaeln wrote: > This recipe ...
8 years, 4 months ago (2012-08-10 21:11:53 UTC) #20
Charlie Reis
LGTM with the requests below. Also, you've got a typo in the CL description: the ...
8 years, 4 months ago (2012-08-13 19:39:21 UTC) #21
awong
Comments addressed. Michael, did you have further comments? I'm itching to get this checked in. ...
8 years, 4 months ago (2012-08-13 21:29:19 UTC) #22
michaeln
8 years, 4 months ago (2012-08-13 21:49:13 UTC) #23
lgtm

Powered by Google App Engine
This is Rietveld 408576698