X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fchrome%2Fbrowser%2Fui%2Fzoom%2Fzoom_controller.cc;h=50fb694637c18442d72ce12516f2ff581e83706d;hb=3545e9f2671f595d2a2f3ee75ca0393b01e35ef6;hp=b17f3a99e4e188a114cdf5dc50daaf18fe26a715;hpb=7d210d4c7e9ba36e635eabc5b5780495f8a63292;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/chrome/browser/ui/zoom/zoom_controller.cc b/src/chrome/browser/ui/zoom/zoom_controller.cc index b17f3a9..50fb694 100644 --- a/src/chrome/browser/ui/zoom/zoom_controller.cc +++ b/src/chrome/browser/ui/zoom/zoom_controller.cc @@ -4,20 +4,15 @@ #include "chrome/browser/ui/zoom/zoom_controller.h" -#include "base/prefs/pref_service.h" -#include "chrome/browser/chrome_notification_types.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/browser_finder.h" +#include "chrome/browser/ui/sad_tab.h" #include "chrome/browser/ui/zoom/zoom_event_manager.h" -#include "chrome/common/pref_names.h" +#include "chrome/browser/ui/zoom/zoom_observer.h" #include "content/public/browser/host_zoom_map.h" #include "content/public/browser/navigation_entry.h" -#include "content/public/browser/notification_details.h" -#include "content/public/browser/notification_service.h" -#include "content/public/browser/notification_types.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/web_contents.h" +#include "content/public/common/page_type.h" #include "content/public/common/page_zoom.h" #include "extensions/common/extension.h" #include "grit/theme_resources.h" @@ -31,19 +26,14 @@ ZoomController::ZoomController(content::WebContents* web_contents) zoom_mode_(ZOOM_MODE_DEFAULT), zoom_level_(1.0), browser_context_(web_contents->GetBrowserContext()) { - Profile* profile = - Profile::FromBrowserContext(web_contents->GetBrowserContext()); - default_zoom_level_.Init( - prefs::kDefaultZoomLevel, - profile->GetPrefs(), - base::Bind( - &ZoomController::UpdateState, base::Unretained(this), std::string())); - zoom_level_ = default_zoom_level_.GetValue(); - - zoom_subscription_ = content::HostZoomMap::GetForBrowserContext( - browser_context_)->AddZoomLevelChangedCallback( - base::Bind(&ZoomController::OnZoomLevelChanged, - base::Unretained(this))); + // TODO(wjmaclean) Make calls to HostZoomMap::GetDefaultForBrowserContext() + // refer to the webcontents-specific HostZoomMap when that becomes available. + content::HostZoomMap* host_zoom_map = + content::HostZoomMap::GetDefaultForBrowserContext(browser_context_); + zoom_level_ = host_zoom_map->GetDefaultZoomLevel(); + + zoom_subscription_ = host_zoom_map->AddZoomLevelChangedCallback( + base::Bind(&ZoomController::OnZoomLevelChanged, base::Unretained(this))); UpdateState(std::string()); } @@ -51,15 +41,14 @@ ZoomController::ZoomController(content::WebContents* web_contents) ZoomController::~ZoomController() {} bool ZoomController::IsAtDefaultZoom() const { - return content::ZoomValuesEqual(GetZoomLevel(), - default_zoom_level_.GetValue()); + return content::ZoomValuesEqual(GetZoomLevel(), GetDefaultZoomLevel()); } int ZoomController::GetResourceForZoomLevel() const { if (IsAtDefaultZoom()) return IDR_ZOOM_NORMAL; - return GetZoomLevel() > default_zoom_level_.GetValue() ? IDR_ZOOM_PLUS - : IDR_ZOOM_MINUS; + return GetZoomLevel() > GetDefaultZoomLevel() ? IDR_ZOOM_PLUS + : IDR_ZOOM_MINUS; } void ZoomController::AddObserver(ZoomObserver* observer) { @@ -90,8 +79,15 @@ bool ZoomController::SetZoomLevel(double zoom_level) { bool ZoomController::SetZoomLevelByExtension( double zoom_level, const scoped_refptr& extension) { - // Cannot zoom in disabled mode. - if (zoom_mode_ == ZOOM_MODE_DISABLED) + content::NavigationEntry* entry = + web_contents()->GetController().GetLastCommittedEntry(); + bool is_normal_page = + entry && entry->GetPageType() == content::PAGE_TYPE_NORMAL; + // Cannot zoom in disabled mode. Also, don't allow changing zoom level on + // a crashed tab, an error page or an interstitial page. + if (zoom_mode_ == ZOOM_MODE_DISABLED || + !web_contents()->GetRenderViewHost()->IsRenderViewLive() || + !is_normal_page) return false; // Store extension data so that |extension| can be attributed when the zoom @@ -124,7 +120,7 @@ bool ZoomController::SetZoomLevelByExtension( } content::HostZoomMap* zoom_map = - content::HostZoomMap::GetForBrowserContext(browser_context_); + content::HostZoomMap::GetDefaultForBrowserContext(browser_context_); DCHECK(zoom_map); DCHECK(!event_data_); event_data_.reset(new ZoomChangedEventData(web_contents(), @@ -139,9 +135,6 @@ bool ZoomController::SetZoomLevelByExtension( zoom_map->SetTemporaryZoomLevel( render_process_id, render_view_id, zoom_level); } else { - content::NavigationEntry* entry = - web_contents()->GetController().GetLastCommittedEntry(); - if (!entry) { last_extension_ = NULL; return false; @@ -160,7 +153,7 @@ void ZoomController::SetZoomMode(ZoomMode new_mode) { return; content::HostZoomMap* zoom_map = - content::HostZoomMap::GetForBrowserContext(browser_context_); + content::HostZoomMap::GetDefaultForBrowserContext(browser_context_); DCHECK(zoom_map); int render_process_id = web_contents()->GetRenderProcessHost()->GetID(); int render_view_id = web_contents()->GetRenderViewHost()->GetRoutingID(); @@ -225,7 +218,7 @@ void ZoomController::SetZoomMode(ZoomMode new_mode) { // the zoom level is handled independently. if (zoom_mode_ != ZOOM_MODE_DISABLED) { zoom_map->SetTemporaryZoomLevel( - render_process_id, render_view_id, default_zoom_level_.GetValue()); + render_process_id, render_view_id, GetDefaultZoomLevel()); zoom_level_ = original_zoom_level; } else { // When we don't call any HostZoomMap set functions, we send the event @@ -239,7 +232,7 @@ void ZoomController::SetZoomMode(ZoomMode new_mode) { case ZOOM_MODE_DISABLED: { // The page needs to be zoomed back to default before disabling the zoom zoom_map->SetTemporaryZoomLevel( - render_process_id, render_view_id, default_zoom_level_.GetValue()); + render_process_id, render_view_id, GetDefaultZoomLevel()); break; } }