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