Index: chrome/browser/android/banners/app_banner_data_fetcher_android.cc |
diff --git a/chrome/browser/android/banners/app_banner_data_fetcher_android.cc b/chrome/browser/android/banners/app_banner_data_fetcher_android.cc |
index bc0662e525468c2699d13089971faae2f81b167d..a35f5802282766f11c6579f2f13508a12ccacc8b 100644 |
--- a/chrome/browser/android/banners/app_banner_data_fetcher_android.cc |
+++ b/chrome/browser/android/banners/app_banner_data_fetcher_android.cc |
@@ -4,10 +4,24 @@ |
#include "chrome/browser/android/banners/app_banner_data_fetcher_android.h" |
+#include <vector> |
+ |
+#include "base/strings/string_util.h" |
#include "chrome/browser/android/banners/app_banner_infobar_delegate.h" |
#include "chrome/browser/ui/android/infobars/app_banner_infobar.h" |
+#include "chrome/common/chrome_constants.h" |
+#include "chrome/common/render_messages.h" |
#include "third_party/skia/include/core/SkBitmap.h" |
+namespace { |
+ |
+const char kMetaViewportTagName[] = "viewport"; |
gone
2015/05/27 22:53:35
Should ask Paul Kinlan about formatting. Curious
dominickn (DO NOT USE)
2015/06/05 07:42:59
Ben found some code in the compositor which seems
|
+const char kMetaViewportWidthDevice[] = "width=device-width"; |
+const char kMetaViewportInitialScaleInt[] = "initial-scale=1"; |
+const char kMetaViewportInitialScaleFloat[] = "initial-scale=1.0"; |
+ |
+} // anonymous namespace |
+ |
namespace banners { |
AppBannerDataFetcherAndroid::AppBannerDataFetcherAndroid( |
@@ -36,6 +50,26 @@ bool AppBannerDataFetcherAndroid::ContinueFetching( |
return FetchIcon(image_url); |
} |
+bool AppBannerDataFetcherAndroid::OnMessageReceived( |
+ const IPC::Message& message) { |
+ bool handled = true; |
+ IPC_BEGIN_MESSAGE_MAP(AppBannerDataFetcherAndroid, message) |
+ IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DidRetrieveMetaTagContent, |
+ OnDidRetrieveMetaTagContent) |
+ IPC_MESSAGE_UNHANDLED(handled = false) |
+ IPC_END_MESSAGE_MAP() |
+ return handled; |
+} |
+ |
+void AppBannerDataFetcherAndroid::Start(const GURL& validated_url) { |
+ validated_url_ = validated_url; |
+ is_active_ = true; |
+ is_responsive_ = false; |
+ |
+ Send(new ChromeViewMsg_RetrieveMetaTagContent(routing_id(), validated_url, |
+ kMetaViewportTagName)); |
+} |
+ |
std::string AppBannerDataFetcherAndroid::GetAppIdentifier() { |
return native_app_data_.is_null() |
? AppBannerDataFetcher::GetAppIdentifier() : native_app_package_; |
@@ -73,4 +107,33 @@ infobars::InfoBar* AppBannerDataFetcherAndroid::CreateBanner( |
return infobar; |
} |
+void AppBannerDataFetcherAndroid::OnDidRetrieveMetaTagContent( |
+ bool success, |
+ const std::string& tag_name, |
+ const std::string& tag_content, |
+ const GURL& expected_url) { |
+ |
gone
2015/05/27 22:53:35
nit: remove newline
|
+ if (success && tag_name == kMetaViewportTagName && |
+ validated_url_ == expected_url && |
+ tag_content.size() <= chrome::kMaxMetaTagAttributeLength) { |
+ std::string local_tag_content; |
+ std::vector<std::string> content_tokens; |
+ |
+ base::RemoveChars(tag_content, " ", &local_tag_content); |
+ base::StringToLowerASCII(&local_tag_content); |
+ Tokenize(local_tag_content, ",", &content_tokens); |
+ |
+ for (auto property : content_tokens) { |
+ if (property == kMetaViewportWidthDevice || |
+ property == kMetaViewportInitialScaleInt || |
+ property == kMetaViewportInitialScaleFloat) { |
+ is_responsive_ = true; |
+ break; |
+ } |
+ } |
+ } |
+ |
+ AppBannerDataFetcher::Start(validated_url_); |
+} |
+ |
} // namespace banners |