diff options
Diffstat (limited to 'chrome/browser/sidebar/sidebar_container.cc')
-rw-r--r-- | chrome/browser/sidebar/sidebar_container.cc | 60 |
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); +} |