#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"
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());
}
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) {
bool ZoomController::SetZoomLevelByExtension(
double zoom_level,
const scoped_refptr<const extensions::Extension>& 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
}
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(),
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;
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();
// 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
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;
}
}