Index: chrome/browser/android/tab_android.cc |
diff --git a/chrome/browser/android/tab_android.cc b/chrome/browser/android/tab_android.cc |
index 005669d1972a18eecc865d99ba76532548b442e1..a8e1e09740039f41f9122560a5e3651b0b715af9 100644 |
--- a/chrome/browser/android/tab_android.cc |
+++ b/chrome/browser/android/tab_android.cc |
@@ -54,6 +54,8 @@ |
#include "components/bookmarks/managed/managed_bookmark_service.h" |
#include "components/dom_distiller/core/url_utils.h" |
#include "components/favicon/content/content_favicon_driver.h" |
+#include "components/feature_engagement_tracker/public/feature_constants.h" |
+#include "components/feature_engagement_tracker/public/feature_list.h" |
#include "components/navigation_interception/intercept_navigation_delegate.h" |
#include "components/navigation_interception/navigation_params.h" |
#include "components/sessions/content/content_live_tab.h" |
@@ -78,6 +80,7 @@ |
#include "third_party/WebKit/public/platform/WebReferrerPolicy.h" |
#include "ui/android/view_android.h" |
#include "ui/android/window_android.h" |
+#include "ui/base/layout.h" |
#include "ui/base/resource/resource_bundle.h" |
#include "ui/base/window_open_disposition.h" |
#include "ui/display/display.h" |
@@ -380,6 +383,12 @@ void TabAndroid::InitWebContents( |
GetProfile()); |
} |
content_layer_->InsertChild(web_contents_->GetNativeView()->GetLayer(), 0); |
+ |
+ if (base::FeatureList::IsEnabled( |
+ feature_engagement_tracker::kIPHMediaDownloadFeature)) { |
+ media_iph_manager_ = |
+ base::MakeUnique<MediaInProductHelpManager>(web_contents_.get(), this); |
+ } |
} |
void TabAndroid::UpdateDelegates( |
@@ -420,6 +429,7 @@ void TabAndroid::DestroyWebContents(JNIEnv* env, |
favicon_driver->RemoveObserver(this); |
web_contents()->SetDelegate(NULL); |
+ media_iph_manager_.reset(); |
if (delete_native) { |
// Terminate the renderer process if this is the last tab. |
@@ -801,6 +811,39 @@ void TabAndroid::AttachToTabContentManager( |
tab_content_manager_->AttachLiveLayer(GetAndroidId(), GetContentLayer()); |
} |
+void TabAndroid::ShowMediaDownloadInProductHelp( |
+ const gfx::Rect& rect_in_frame) { |
+ DCHECK(web_contents_); |
+ |
+ // We need to account for the browser controls offset to get the location for |
+ // the widget in the view. |
+ float content_offset = web_contents_->GetNativeView()->content_offset(); |
+ gfx::Rect rect_in_view(rect_in_frame.x(), rect_in_frame.y() + content_offset, |
+ rect_in_frame.width(), rect_in_frame.height()); |
+ gfx::Rect rect_in_view_scaled = gfx::ScaleToEnclosingRectSafe( |
+ rect_in_view, |
+ ui::GetScaleFactorForNativeView(web_contents_->GetNativeView())); |
+ |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ Java_Tab_showMediaDownloadInProductHelp( |
+ env, weak_java_tab_.get(env), rect_in_view_scaled.x(), |
+ rect_in_view_scaled.y(), rect_in_view_scaled.width(), |
+ rect_in_view_scaled.height()); |
+} |
+ |
+void TabAndroid::DismissMediaDownloadInProductHelp() { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ Java_Tab_hideMediaDownloadInProductHelp(env, weak_java_tab_.get(env)); |
+} |
+ |
+void TabAndroid::DownloadMediaInProductHelpDismissed( |
+ JNIEnv* env, |
+ const base::android::JavaParamRef<jobject>& obj) { |
+ DCHECK(media_iph_manager_); |
+ |
+ media_iph_manager_->WidgetDismissed(); |
+} |
+ |
scoped_refptr<content::DevToolsAgentHost> TabAndroid::GetDevToolsAgentHost() { |
return devtools_host_; |
} |