Index: chromecast/browser/cast_content_browser_client.cc |
diff --git a/chromecast/browser/cast_content_browser_client.cc b/chromecast/browser/cast_content_browser_client.cc |
index 39ffe59e106972dfaeda5bba64eb4660ccaef65a..731902baf32b5336e9ab6588961ff517ce5f7428 100644 |
--- a/chromecast/browser/cast_content_browser_client.cc |
+++ b/chromecast/browser/cast_content_browser_client.cc |
@@ -27,6 +27,7 @@ |
#include "chromecast/browser/cast_network_delegate.h" |
#include "chromecast/browser/cast_quota_permission_context.h" |
#include "chromecast/browser/cast_resource_dispatcher_host_delegate.h" |
+#include "chromecast/browser/cast_web_contents_user_data.h" |
#include "chromecast/browser/geolocation/cast_access_token_store.h" |
#include "chromecast/browser/media/cma_message_filter_host.h" |
#include "chromecast/browser/service/cast_service_simple.h" |
@@ -50,6 +51,7 @@ |
#include "content/public/common/web_preferences.h" |
#include "net/ssl/ssl_cert_request_info.h" |
#include "net/url_request/url_request_context_getter.h" |
+#include "ui/gfx/screen.h" |
#include "ui/gl/gl_switches.h" |
#if defined(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS) |
@@ -276,13 +278,40 @@ void CastContentBrowserClient::OverrideWebkitPrefs( |
// Enable 5% margins for WebVTT cues to keep within title-safe area |
prefs->text_track_margin_percentage = 5; |
+ // This block of logic allows us to force 720p resolution for apps which don't |
+ // handle scaling to higher resolutions (i.e. were built assuming 720p and |
+ // have layout or performance problems at anything else). |
+ // We use the viewport tag approach and ViewportStyle::TELEVISION to force a |
+ // 720p layout viewport in this case. |
+ // TODO(halliwell): require apps to handle scaling to any resolution; then |
+ // we can simply run at the platform's native resolution. |
#if defined(OS_ANDROID) |
- // Enable the television style for viewport so that all cast apps have a |
- // 1280px wide layout viewport by default. |
+ // Android has viewport enabled by default. Disable for consistency with |
+ // Linux (only enable below for 720p app case). |
DCHECK(prefs->viewport_enabled); |
DCHECK(prefs->viewport_meta_enabled); |
- prefs->viewport_style = content::ViewportStyle::TELEVISION; |
+ prefs->viewport_enabled = false; |
alokp
2016/05/11 16:46:53
This seems risky to me. I am not sure what else we
|
+ prefs->viewport_meta_enabled = false; |
#endif // defined(OS_ANDROID) |
+ |
+ content::WebContents* web_contents = |
+ content::WebContents::FromRenderViewHost(render_view_host); |
+ if (web_contents) { |
+ CastWebContentsUserData* user_data = |
+ static_cast<CastWebContentsUserData*>( |
+ web_contents->GetUserData(CastWebContentsUserData::UserDataKey())); |
+ if (user_data->resolution_height() == 720) { |
+ prefs->viewport_enabled = true; |
+ prefs->viewport_meta_enabled = true; |
+ prefs->viewport_style = content::ViewportStyle::TELEVISION; |
+ |
+ gfx::Size display_size = |
+ gfx::Screen::GetScreen()->GetPrimaryDisplay().size(); |
+ const float scale_factor = display_size.height() / 720.0f; |
+ prefs->default_minimum_page_scale_factor = scale_factor; |
+ prefs->default_maximum_page_scale_factor = scale_factor; |
+ } |
+ } |
} |
void CastContentBrowserClient::ResourceDispatcherHostCreated() { |