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.
4
5#include "chrome/browser/android/dom_distiller/feedback_reporter_android.h"
6
7#include "base/android/jni_android.h"
8#include "base/command_line.h"
9#include "chrome/common/chrome_switches.h"
10#include "components/dom_distiller/core/feedback_reporter.h"
11#include "components/dom_distiller/core/url_utils.h"
12#include "content/public/browser/navigation_details.h"
13#include "content/public/browser/navigation_entry.h"
14#include "content/public/browser/web_contents_observer.h"
15#include "content/public/common/frame_navigate_params.h"
16#include "jni/DomDistillerFeedbackReporter_jni.h"
17#include "url/gurl.h"
18
19namespace dom_distiller {
20
21namespace android {
22
23// static
24jboolean IsEnabled(JNIEnv* env, jclass clazz) {
25  return CommandLine::ForCurrentProcess()->HasSwitch(
26      switches::kEnableDomDistiller);
27}
28
29// static
30void ReportQuality(JNIEnv* env, jclass clazz, jboolean j_good) {
31  FeedbackReporter::ReportQuality(j_good);
32}
33
34FeedbackReporterAndroid::FeedbackReporterAndroid(JNIEnv* env, jobject obj)
35    : weak_java_feedback_reporter_(env, obj) {}
36
37FeedbackReporterAndroid::~FeedbackReporterAndroid() {}
38
39void FeedbackReporterAndroid::Destroy(JNIEnv* env, jobject obj) { delete this; }
40
41void FeedbackReporterAndroid::ReplaceWebContents(JNIEnv* env,
42                                                 jobject obj,
43                                                 jobject jweb_contents) {
44  content::WebContents* web_contents =
45      content::WebContents::FromJavaWebContents(jweb_contents);
46  Observe(web_contents);
47}
48
49void FeedbackReporterAndroid::DidNavigateMainFrame(
50    const content::LoadCommittedDetails& details,
51    const content::FrameNavigateParams& params) {
52  JNIEnv* env = base::android::AttachCurrentThread();
53  ScopedJavaLocalRef<jobject> jobj = weak_java_feedback_reporter_.get(env);
54  if (jobj.is_null())
55    return;
56  Java_DomDistillerFeedbackReporter_dismissOverlay(env, jobj.obj());
57  GURL url = details.entry->GetURL();
58  if (dom_distiller::url_utils::IsDistilledPage(url)) {
59    Java_DomDistillerFeedbackReporter_showOverlay(env, jobj.obj());
60  }
61}
62
63jlong Init(JNIEnv* env, jobject obj) {
64  FeedbackReporterAndroid* reporter = new FeedbackReporterAndroid(env, obj);
65  return reinterpret_cast<intptr_t>(reporter);
66}
67
68// static
69bool RegisterFeedbackReporter(JNIEnv* env) { return RegisterNativesImpl(env); }
70
71}  // namespace android
72
73}  // namespace dom_distiller
74