summaryrefslogtreecommitdiffstats
path: root/chrome/browser/sidebar/sidebar_container.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/sidebar/sidebar_container.cc')
-rw-r--r--chrome/browser/sidebar/sidebar_container.cc60
1 files changed, 58 insertions, 2 deletions
diff --git a/chrome/browser/sidebar/sidebar_container.cc b/chrome/browser/sidebar/sidebar_container.cc
index 7112433..a28ef21 100644
--- a/chrome/browser/sidebar/sidebar_container.cc
+++ b/chrome/browser/sidebar/sidebar_container.cc
@@ -4,12 +4,18 @@
#include "chrome/browser/sidebar/sidebar_container.h"
+#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/renderer_host/render_view_host.h"
#include "chrome/browser/tab_contents/navigation_controller.h"
#include "chrome/browser/tab_contents/navigation_entry.h"
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/tab_contents/tab_contents_view.h"
#include "chrome/common/bindings_policy.h"
+#include "chrome/common/extensions/extension.h"
+#include "chrome/common/extensions/extension_resource.h"
+#include "chrome/common/extensions/extension_sidebar_defaults.h"
+#include "chrome/common/extensions/extension_sidebar_utils.h"
#include "googleurl/src/gurl.h"
#include "third_party/skia/include/core/SkBitmap.h"
@@ -19,7 +25,9 @@ SidebarContainer::SidebarContainer(TabContents* tab,
: tab_(tab),
content_id_(content_id),
delegate_(delegate),
- icon_(new SkBitmap) {
+ icon_(new SkBitmap),
+ navigate_to_default_url_on_expand_(true),
+ use_default_icon_(true) {
// Create TabContents for sidebar.
sidebar_contents_.reset(
new TabContents(tab->profile(), NULL, MSG_ROUTING_NONE, NULL, NULL));
@@ -36,11 +44,41 @@ void SidebarContainer::SidebarClosing() {
delegate_->UpdateSidebar(this);
}
+void SidebarContainer::LoadDefaults() {
+ const Extension* extension = GetExtension();
+ if (!extension)
+ return; // Can be NULL in tests.
+ const ExtensionSidebarDefaults* sidebar_defaults =
+ extension->sidebar_defaults();
+
+ title_ = sidebar_defaults->default_title();
+
+ if (!sidebar_defaults->default_icon_path().empty()) {
+ image_loading_tracker_.reset(new ImageLoadingTracker(this));
+ image_loading_tracker_->LoadImage(
+ extension,
+ extension->GetResource(sidebar_defaults->default_icon_path()),
+ gfx::Size(Extension::kSidebarIconMaxSize,
+ Extension::kSidebarIconMaxSize),
+ ImageLoadingTracker::CACHE);
+ }
+}
+
void SidebarContainer::Show() {
delegate_->UpdateSidebar(this);
}
void SidebarContainer::Expand() {
+ if (navigate_to_default_url_on_expand_) {
+ navigate_to_default_url_on_expand_ = false;
+ // Check whether a default URL is specified for this sidebar.
+ const Extension* extension = GetExtension();
+ if (extension) { // Can be NULL in tests.
+ if (extension->sidebar_defaults()->default_url().is_valid())
+ Navigate(extension->sidebar_defaults()->default_url());
+ }
+ }
+
delegate_->UpdateSidebar(this);
sidebar_contents_->view()->SetInitialFocus();
}
@@ -50,8 +88,8 @@ void SidebarContainer::Collapse() {
}
void SidebarContainer::Navigate(const GURL& url) {
- DCHECK(sidebar_contents_.get());
// TODO(alekseys): add a progress UI.
+ navigate_to_default_url_on_expand_ = false;
sidebar_contents_->controller().LoadURL(
url, GURL(), PageTransition::START_PAGE);
}
@@ -61,6 +99,7 @@ void SidebarContainer::SetBadgeText(const string16& badge_text) {
}
void SidebarContainer::SetIcon(const SkBitmap& bitmap) {
+ use_default_icon_ = false;
*icon_ = bitmap;
}
@@ -72,3 +111,20 @@ bool SidebarContainer::IsPopup(const TabContents* source) const {
return false;
}
+void SidebarContainer::OnImageLoaded(SkBitmap* image,
+ ExtensionResource resource,
+ int index) {
+ if (image && use_default_icon_) {
+ *icon_ = *image;
+ delegate_->UpdateSidebar(this);
+ }
+}
+
+const Extension* SidebarContainer::GetExtension() const {
+ ExtensionService* service =
+ sidebar_contents_->profile()->GetExtensionService();
+ if (!service)
+ return NULL;
+ return service->GetExtensionById(
+ extension_sidebar_utils::GetExtensionIdByContentId(content_id_), false);
+}