Don't stop and restart GCM when extension/app is being updated

BUG=384010
TEST=new tests added

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@277865 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/extensions/extension_gcm_app_handler.h b/chrome/browser/extensions/extension_gcm_app_handler.h
index 8c7bc33..a61dc25 100644
--- a/chrome/browser/extensions/extension_gcm_app_handler.h
+++ b/chrome/browser/extensions/extension_gcm_app_handler.h
@@ -56,10 +56,15 @@
       const gcm::GCMClient::SendErrorDetails& send_error_details) OVERRIDE;
 
  protected:
+  // Could be overridden by testing purpose.
   virtual void OnUnregisterCompleted(const std::string& app_id,
                                      gcm::GCMClient::Result result);
+  virtual void AddAppHandler(const std::string& app_id);
+  virtual void RemoveAppHandler(const std::string& app_id);
 
- private:
+  gcm::GCMDriver* GetGCMDriver() const;
+
+private:
   friend class BrowserContextKeyedAPIFactory<ExtensionGCMAppHandler>;
 
   // ExtensionRegistryObserver implementation.
@@ -72,7 +77,8 @@
   virtual void OnExtensionUninstalled(content::BrowserContext* browser_context,
                                       const Extension* extension) OVERRIDE;
 
-  gcm::GCMDriver* GetGCMDriver() const;
+  void AddDummyAppHandler();
+  void RemoveDummyAppHandler();
 
   // BrowserContextKeyedAPI implementation.
   static const char* service_name() { return "ExtensionGCMAppHandler"; }