Get rid of extensions dependency from content\browser.

BUG=76789
Review URL: http://codereview.chromium.org/6693054

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80315 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/extensions/extension_tab_helper.h b/chrome/browser/extensions/extension_tab_helper.h
new file mode 100644
index 0000000..5b9c60a6
--- /dev/null
+++ b/chrome/browser/extensions/extension_tab_helper.h
@@ -0,0 +1,93 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSOIN_TAB_HELPER_H_
+#define CHROME_BROWSER_EXTENSIONS_EXTENSOIN_TAB_HELPER_H_
+#pragma once
+
+#include "content/browser/tab_contents/tab_contents_observer.h"
+#include "chrome/browser/extensions/image_loading_tracker.h"
+#include "third_party/skia/include/core/SkBitmap.h"
+
+class Extension;
+
+// Per-tab extension helper.
+class ExtensionTabHelper : public TabContentsObserver,
+                           public ImageLoadingTracker::Observer {
+ public:
+  explicit ExtensionTabHelper(TabContents* tab_contents);
+  virtual ~ExtensionTabHelper();
+
+  // Copies the internal state from another ExtensionTabHelper.
+  void CopyStateFrom(const ExtensionTabHelper& source);
+
+  // Call this after updating a page action to notify clients about the changes.
+  void PageActionStateChanged();
+
+  // App extensions ------------------------------------------------------------
+
+  // Sets the extension denoting this as an app. If |extension| is non-null this
+  // tab becomes an app-tab. TabContents does not listen for unload events for
+  // the extension. It's up to consumers of TabContents to do that.
+  //
+  // NOTE: this should only be manipulated before the tab is added to a browser.
+  // TODO(sky): resolve if this is the right way to identify an app tab. If it
+  // is, than this should be passed in the constructor.
+  void SetExtensionApp(const Extension* extension);
+
+  // Convenience for setting the app extension by id. This does nothing if
+  // |extension_app_id| is empty, or an extension can't be found given the
+  // specified id.
+  void SetExtensionAppById(const std::string& extension_app_id);
+
+  const Extension* extension_app() const { return extension_app_; }
+  bool is_app() const { return extension_app_ != NULL; }
+
+  // If an app extension has been explicitly set for this TabContents its icon
+  // is returned.
+  //
+  // NOTE: the returned icon is larger than 16x16 (its size is
+  // Extension::EXTENSION_ICON_SMALLISH).
+  SkBitmap* GetExtensionAppIcon();
+
+  TabContents* tab_contents() const {
+      return TabContentsObserver::tab_contents();
+  }
+
+ private:
+  // TabContentsObserver overrides.
+  virtual void DidNavigateMainFramePostCommit(
+      const NavigationController::LoadCommittedDetails& details,
+      const ViewHostMsg_FrameNavigate_Params& params) OVERRIDE;
+  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
+
+  // App extensions related methods:
+
+  // Resets app_icon_ and if |extension| is non-null creates a new
+  // ImageLoadingTracker to load the extension's image.
+  void UpdateExtensionAppIcon(const Extension* extension);
+
+  // ImageLoadingTracker::Observer.
+  virtual void OnImageLoaded(SkBitmap* image, const ExtensionResource& resource,
+                             int index);
+
+  // Message handlers.
+  void OnPostMessage(int port_id, const std::string& message);
+
+  // Data for app extensions ---------------------------------------------------
+
+  // If non-null this tab is an app tab and this is the extension the tab was
+  // created for.
+  const Extension* extension_app_;
+
+  // Icon for extension_app_ (if non-null) or extension_for_current_page_.
+  SkBitmap extension_app_icon_;
+
+  // Used for loading extension_app_icon_.
+  scoped_ptr<ImageLoadingTracker> extension_app_image_loader_;
+
+  DISALLOW_COPY_AND_ASSIGN(ExtensionTabHelper);
+};
+
+#endif  // CHROME_BROWSER_EXTENSIONS_EXTENSOIN_TAB_HELPER_H_