Index: chrome/browser/sidebar/sidebar_container.cc |
=================================================================== |
--- chrome/browser/sidebar/sidebar_container.cc (revision 71115) |
+++ chrome/browser/sidebar/sidebar_container.cc (working copy) |
@@ -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 @@ |
: 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 @@ |
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::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::SetIcon(const SkBitmap& bitmap) { |
+ use_default_icon_ = false; |
*icon_ = bitmap; |
} |
@@ -72,3 +111,20 @@ |
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); |
+} |