Switch WebContentsUserData to be a friended base.

BUG=107201
TEST=no visible change


Review URL: https://chromiumcodereview.appspot.com/10933105

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@156988 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/extensions/tab_helper.h b/chrome/browser/extensions/tab_helper.h
index cad235e..05a2665 100644
--- a/chrome/browser/extensions/tab_helper.h
+++ b/chrome/browser/extensions/tab_helper.h
@@ -51,9 +51,7 @@
     UPDATE_SHORTCUT   // Update icon for app shortcut.
   };
 
-  explicit TabHelper(content::WebContents* web_contents);
   virtual ~TabHelper();
-  static int kUserDataKey;
 
   void CreateApplicationShortcuts();
   bool CanCreateApplicationShortcuts() const;
@@ -115,6 +113,10 @@
   void SetAppIcon(const SkBitmap& app_icon);
 
  private:
+  explicit TabHelper(content::WebContents* web_contents);
+  static int kUserDataKey;
+  friend class WebContentsUserData<TabHelper>;
+
   // content::WebContentsObserver overrides.
   virtual void RenderViewCreated(
       content::RenderViewHost* render_view_host) OVERRIDE;
diff --git a/chrome/browser/sessions/session_tab_helper.h b/chrome/browser/sessions/session_tab_helper.h
index dad21d2d..2e371fd 100644
--- a/chrome/browser/sessions/session_tab_helper.h
+++ b/chrome/browser/sessions/session_tab_helper.h
@@ -15,9 +15,7 @@
 class SessionTabHelper : public content::WebContentsObserver,
                          public WebContentsUserData<SessionTabHelper> {
  public:
-  explicit SessionTabHelper(content::WebContents* contents);
   virtual ~SessionTabHelper();
-  static int kUserDataKey;
 
   // Returns the identifier used by session restore for this tab.
   const SessionID& session_id() const { return session_id_; }
@@ -32,6 +30,10 @@
   virtual void UserAgentOverrideSet(const std::string& user_agent) OVERRIDE;
 
  private:
+  explicit SessionTabHelper(content::WebContents* contents);
+  static int kUserDataKey;
+  friend class WebContentsUserData<SessionTabHelper>;
+
   // Unique identifier of the tab for session restore. This id is only unique
   // within the current session, and is not guaranteed to be unique across
   // sessions.
diff --git a/chrome/browser/tab_contents/web_contents_user_data.h b/chrome/browser/tab_contents/web_contents_user_data.h
index 77d57f2..8126c38 100644
--- a/chrome/browser/tab_contents/web_contents_user_data.h
+++ b/chrome/browser/tab_contents/web_contents_user_data.h
@@ -14,10 +14,13 @@
 // --- in foo_tab_helper.h ---
 // class FooTabHelper : public WebContentsUserData<FooTabHelper> {
 //  public:
-//   explicit FooTabHelper(content::WebContents* contents);
 //   virtual ~FooTabHelper();
+//   // ... more public stuff here ...
+//  private:
+//   explicit FooTabHelper(content::WebContents* contents);
 //   static int kUserDataKey;
-//  // ... more stuff here ...
+//   friend class WebContentsUserData<FooTabHelper>;
+//   // ... more private stuff here ...
 // }
 // --- in foo_tab_helper.cc ---
 // int FooTabHelper::kUserDataKey;
diff --git a/chrome/browser/tab_contents/web_contents_user_data_unittest.cc b/chrome/browser/tab_contents/web_contents_user_data_unittest.cc
index f8ff6c5be..bbba1cd 100644
--- a/chrome/browser/tab_contents/web_contents_user_data_unittest.cc
+++ b/chrome/browser/tab_contents/web_contents_user_data_unittest.cc
@@ -16,17 +16,21 @@
 class WebContentsAttachedClass1
     : public WebContentsUserData<WebContentsAttachedClass1> {
  public:
-  explicit WebContentsAttachedClass1(content::WebContents* contents) {}
   virtual ~WebContentsAttachedClass1() {}
+ private:
+  explicit WebContentsAttachedClass1(content::WebContents* contents) {}
   static int kUserDataKey;
+  friend class WebContentsUserData<WebContentsAttachedClass1>;
 };
 
 class WebContentsAttachedClass2
     : public WebContentsUserData<WebContentsAttachedClass2> {
  public:
-  explicit WebContentsAttachedClass2(content::WebContents* contents) {}
   virtual ~WebContentsAttachedClass2() {}
+ private:
+  explicit WebContentsAttachedClass2(content::WebContents* contents) {}
   static int kUserDataKey;
+  friend class WebContentsUserData<WebContentsAttachedClass2>;
 };
 
 int WebContentsAttachedClass1::kUserDataKey;
diff --git a/chrome/browser/ui/metro_pin_tab_helper.h b/chrome/browser/ui/metro_pin_tab_helper.h
index c439414..c04502a 100644
--- a/chrome/browser/ui/metro_pin_tab_helper.h
+++ b/chrome/browser/ui/metro_pin_tab_helper.h
@@ -12,9 +12,7 @@
 class MetroPinTabHelper : public content::WebContentsObserver,
                           public WebContentsUserData<MetroPinTabHelper> {
  public:
-  explicit MetroPinTabHelper(content::WebContents* tab_contents);
   virtual ~MetroPinTabHelper();
-  static int kUserDataKey;
 
   bool is_pinned() const { return is_pinned_; }
 
@@ -26,6 +24,10 @@
       const content::FrameNavigateParams& params) OVERRIDE;
 
  private:
+  explicit MetroPinTabHelper(content::WebContents* tab_contents);
+  static int kUserDataKey;
+  friend class WebContentsUserData<MetroPinTabHelper>;
+
   // Queries the metro driver about the pinned state of the current URL.
   void UpdatePinnedStateForCurrentURL();