Implement ManifestManager to handle manifest in content/.

This can be used from the renderer process or the browser
process. Requesting the manifest can be done via one call, a
callback has to be passed and will run with the manifest
passed as parameter. A failure will return the empty
manifest.

Some more logic could be added like caching the manifest in
the browser process or keeping track of the manifest dirty
state in the browser process but those things can be added
transparently later.

BUG=366145

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

Cr-Commit-Position: refs/heads/master@{#295085}
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index f8f0d8b..912fe05 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -54,6 +54,7 @@
 class GeolocationDispatcherHost;
 class InterstitialPageImpl;
 class JavaScriptDialogManager;
+class ManifestManagerHost;
 class MidiDispatcherHost;
 class PowerSaveBlocker;
 class RenderViewHost;
@@ -331,6 +332,7 @@
   virtual void StopFinding(StopFindAction action) OVERRIDE;
   virtual void InsertCSS(const std::string& css) OVERRIDE;
   virtual bool WasRecentlyAudible() OVERRIDE;
+  virtual void GetManifest(const GetManifestCallback&) OVERRIDE;
 #if defined(OS_ANDROID)
   virtual base::android::ScopedJavaLocalRef<jobject> GetJavaWebContents()
       OVERRIDE;
@@ -1230,6 +1232,8 @@
   scoped_ptr<ScreenOrientationDispatcherHost>
       screen_orientation_dispatcher_host_;
 
+  scoped_ptr<ManifestManagerHost> manifest_manager_host_;
+
   // The accessibility mode for all frames. This is queried when each frame
   // is created, and broadcast to all frames when it changes.
   AccessibilityMode accessibility_mode_;