Chromium Code Reviews| Index: chrome/browser/android/dom_distiller/feedback_reporter_android.cc |
| diff --git a/chrome/browser/android/dom_distiller/feedback_reporter_android.cc b/chrome/browser/android/dom_distiller/feedback_reporter_android.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..37867bb01d143edeae5f40a02546d543352f3576 |
| --- /dev/null |
| +++ b/chrome/browser/android/dom_distiller/feedback_reporter_android.cc |
| @@ -0,0 +1,89 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/android/dom_distiller/feedback_reporter_android.h" |
| + |
| +#include "base/android/jni_android.h" |
| +#include "base/android/jni_string.h" |
| +#include "base/command_line.h" |
| +#include "chrome/common/chrome_switches.h" |
| +#include "chrome/common/url_constants.h" |
| +#include "components/dom_distiller/core/feedback_reporter.h" |
| +#include "content/public/browser/navigation_details.h" |
| +#include "content/public/browser/navigation_entry.h" |
| +#include "content/public/browser/web_contents_observer.h" |
| +#include "content/public/common/frame_navigate_params.h" |
| +#include "jni/FeedbackReporter_jni.h" |
| +#include "url/gurl.h" |
| + |
| +using base::android::ConvertJavaStringToUTF8; |
| +using base::android::ConvertUTF8ToJavaString; |
| + |
| +namespace dom_distiller { |
| + |
| +namespace android { |
| + |
| +// static |
| +jboolean IsEnabled(JNIEnv* env, jclass clazz) { |
| + return CommandLine::ForCurrentProcess()->HasSwitch( |
| + switches::kEnableDomDistiller); |
| +} |
| + |
| +// static |
| +void ReportQuality(JNIEnv* env, jclass clazz, jboolean j_good) { |
| + FeedbackReporter::ReportQuality(j_good); |
| +} |
| + |
| +// static |
| +jboolean IsReportableUrl(JNIEnv* env, jclass clazz, jstring j_url_str) { |
| + const std::string url_str = ConvertJavaStringToUTF8(env, j_url_str); |
| + const GURL url(url_str); |
| + if (!url.is_valid()) |
| + return false; |
| + return url.scheme() == chrome::kDomDistillerScheme; |
| +} |
| + |
| +FeedbackReporterAndroid::FeedbackReporterAndroid(JNIEnv* env, jobject obj) |
| + : weak_java_feedback_reporter_(env, obj) {} |
| + |
| +FeedbackReporterAndroid::~FeedbackReporterAndroid() {} |
| + |
| +void FeedbackReporterAndroid::Destroy(JNIEnv* env, jobject obj) { delete this; } |
|
newt (away)
2014/03/17 18:19:19
nit: "delete this" should probably go on a new lin
nyquist
2014/03/17 20:13:42
Not according to clang format. Keeping as is since
|
| + |
| +void FeedbackReporterAndroid::ReplaceWebContents(JNIEnv* env, |
| + jobject obj, |
| + jobject jweb_contents) { |
| + content::WebContents* web_contents = |
| + content::WebContents::FromJavaWebContents(jweb_contents); |
| + Observe(web_contents); |
| +} |
| + |
| +void FeedbackReporterAndroid::DidNavigateMainFrame( |
| + const content::LoadCommittedDetails& details, |
| + const content::FrameNavigateParams& params) { |
| + JNIEnv* env = base::android::AttachCurrentThread(); |
| + ScopedJavaLocalRef<jobject> jobj = weak_java_feedback_reporter_.get(env); |
| + if (jobj.is_null()) |
| + return; |
| + base::android::ScopedJavaLocalRef<jstring> j_current_overlay_url_str = |
| + Java_FeedbackReporter_getCurrentOverlayUrl(env, jobj.obj()); |
| + std::string current_overlay_url_str = |
| + ConvertJavaStringToUTF8(j_current_overlay_url_str); |
| + GURL current_overlay_url(current_overlay_url_str); |
| + GURL navigation_url = details.entry->GetURL(); |
| + if (!current_overlay_url.is_valid() || navigation_url != current_overlay_url) |
| + Java_FeedbackReporter_dismissOverlay(env, jobj.obj()); |
| +} |
| + |
| +jlong Init(JNIEnv* env, jobject obj) { |
| + FeedbackReporterAndroid* reporter = new FeedbackReporterAndroid(env, obj); |
| + return reinterpret_cast<intptr_t>(reporter); |
| +} |
| + |
| +// static |
| +bool RegisterFeedbackReporter(JNIEnv* env) { return RegisterNativesImpl(env); } |
| + |
| +} // namespace android |
| + |
| +} // namespace dom_distiller |