1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/android/dom_distiller/feedback_reporter_android.h"
7 #include "base/android/jni_android.h"
8 #include "base/android/jni_string.h"
9 #include "base/command_line.h"
10 #include "chrome/common/chrome_switches.h"
11 #include "chrome/common/url_constants.h"
12 #include "components/dom_distiller/core/feedback_reporter.h"
13 #include "content/public/browser/navigation_details.h"
14 #include "content/public/browser/navigation_entry.h"
15 #include "content/public/browser/web_contents_observer.h"
16 #include "content/public/common/frame_navigate_params.h"
17 #include "jni/FeedbackReporter_jni.h"
20 using base::android::ConvertJavaStringToUTF8
;
21 using base::android::ConvertUTF8ToJavaString
;
23 namespace dom_distiller
{
28 jboolean
IsEnabled(JNIEnv
* env
, jclass clazz
) {
29 return CommandLine::ForCurrentProcess()->HasSwitch(
30 switches::kEnableDomDistiller
);
34 void ReportQuality(JNIEnv
* env
, jclass clazz
, jboolean j_good
) {
35 FeedbackReporter::ReportQuality(j_good
);
39 jboolean
IsReportableUrl(JNIEnv
* env
, jclass clazz
, jstring j_url_str
) {
40 const std::string url_str
= ConvertJavaStringToUTF8(env
, j_url_str
);
41 const GURL
url(url_str
);
44 return url
.scheme() == chrome::kDomDistillerScheme
;
47 FeedbackReporterAndroid::FeedbackReporterAndroid(JNIEnv
* env
, jobject obj
)
48 : weak_java_feedback_reporter_(env
, obj
) {}
50 FeedbackReporterAndroid::~FeedbackReporterAndroid() {}
52 void FeedbackReporterAndroid::Destroy(JNIEnv
* env
, jobject obj
) { delete this; }
54 void FeedbackReporterAndroid::ReplaceWebContents(JNIEnv
* env
,
56 jobject jweb_contents
) {
57 content::WebContents
* web_contents
=
58 content::WebContents::FromJavaWebContents(jweb_contents
);
59 Observe(web_contents
);
62 void FeedbackReporterAndroid::DidNavigateMainFrame(
63 const content::LoadCommittedDetails
& details
,
64 const content::FrameNavigateParams
& params
) {
65 JNIEnv
* env
= base::android::AttachCurrentThread();
66 ScopedJavaLocalRef
<jobject
> jobj
= weak_java_feedback_reporter_
.get(env
);
69 base::android::ScopedJavaLocalRef
<jstring
> j_current_overlay_url_str
=
70 Java_FeedbackReporter_getCurrentOverlayUrl(env
, jobj
.obj());
71 std::string current_overlay_url_str
=
72 ConvertJavaStringToUTF8(j_current_overlay_url_str
);
73 GURL
current_overlay_url(current_overlay_url_str
);
74 GURL navigation_url
= details
.entry
->GetURL();
75 if (!current_overlay_url
.is_valid() || navigation_url
!= current_overlay_url
)
76 Java_FeedbackReporter_dismissOverlay(env
, jobj
.obj());
79 jlong
Init(JNIEnv
* env
, jobject obj
) {
80 FeedbackReporterAndroid
* reporter
= new FeedbackReporterAndroid(env
, obj
);
81 return reinterpret_cast<intptr_t>(reporter
);
85 bool RegisterFeedbackReporter(JNIEnv
* env
) { return RegisterNativesImpl(env
); }
87 } // namespace android
89 } // namespace dom_distiller