Migrate HostZoomMap to live in StoragePartition.

This CL changes the persistence of host zoom levels to be on
a per-storage-partition basis, as opposed to (the current)
per-profile basis. This is needed to allow WebView content
(withing apps) to keep their zoom levels independent of those
in the main browser window.

BUG=335317

Review URL: https://codereview.chromium.org/393133002

Cr-Commit-Position: refs/heads/master@{#303841}
diff --git a/chrome/browser/ui/zoom/zoom_controller_browsertest.cc b/chrome/browser/ui/zoom/zoom_controller_browsertest.cc
index 36a211489..4d0ffd5 100644
--- a/chrome/browser/ui/zoom/zoom_controller_browsertest.cc
+++ b/chrome/browser/ui/zoom/zoom_controller_browsertest.cc
@@ -20,8 +20,6 @@
 #include "content/public/test/browser_test_utils.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
-typedef InProcessBrowserTest ZoomControllerBrowserTest;
-
 bool operator==(const ZoomController::ZoomChangedEventData& lhs,
                 const ZoomController::ZoomChangedEventData& rhs) {
   return lhs.web_contents == rhs.web_contents &&
@@ -59,7 +57,17 @@
   DISALLOW_COPY_AND_ASSIGN(ZoomChangedWatcher);
 };
 
-// TODO(wjmaclean): Enable this on Android when we can kill the process there.
+class TestZoomObserver : public ZoomObserver {
+ public:
+  MOCK_METHOD1(OnZoomChanged,
+               void(const ZoomController::ZoomChangedEventData&));
+};
+
+class ZoomControllerBrowserTest: public InProcessBrowserTest {
+ protected:
+  TestZoomObserver zoom_observer_;
+};
+
 #if defined(OS_ANDROID)
 #define MAYBE_CrashedTabsDoNotChangeZoom DISABLED_CrashedTabsDoNotChangeZoom
 #else
@@ -133,3 +141,28 @@
   zoom_controller->SetZoomLevel(new_zoom_level);
   EXPECT_FLOAT_EQ(new_zoom_level, zoom_controller->GetZoomLevel());
 }
+
+IN_PROC_BROWSER_TEST_F(ZoomControllerBrowserTest, Observe) {
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  ZoomController* zoom_controller =
+      ZoomController::FromWebContents(web_contents);
+  zoom_controller->AddObserver(&zoom_observer_);
+
+  double new_zoom_level = 1.0;
+  // When the event is initiated from HostZoomMap, the old zoom level is not
+  // available.
+  ZoomController::ZoomChangedEventData zoom_change_data(
+      web_contents,
+      new_zoom_level,
+      new_zoom_level,
+      ZoomController::ZOOM_MODE_DEFAULT,
+      true);  // We have a non-empty host, so this will be 'true'.
+  EXPECT_CALL(zoom_observer_, OnZoomChanged(zoom_change_data)).Times(1);
+
+  content::HostZoomMap* host_zoom_map =
+      content::HostZoomMap::GetDefaultForBrowserContext(
+          web_contents->GetBrowserContext());
+
+  host_zoom_map->SetZoomLevelForHost("about:blank", new_zoom_level);
+}