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