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