Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(478)

Side by Side Diff: chrome/browser/android/dom_distiller/feedback_reporter_android.cc

Issue 208263010: Fix a problem that FeedbackReportingView is stacked infinitely whenever navigating to chrome-distil… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/android/dom_distiller/feedback_reporter_android.h" 5 #include "chrome/browser/android/dom_distiller/feedback_reporter_android.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_string.h"
9 #include "base/command_line.h" 8 #include "base/command_line.h"
10 #include "chrome/common/chrome_switches.h" 9 #include "chrome/common/chrome_switches.h"
11 #include "chrome/common/url_constants.h" 10 #include "chrome/common/url_constants.h"
12 #include "components/dom_distiller/core/feedback_reporter.h" 11 #include "components/dom_distiller/core/feedback_reporter.h"
12 #include "components/dom_distiller/core/url_utils.h"
13 #include "content/public/browser/navigation_details.h" 13 #include "content/public/browser/navigation_details.h"
14 #include "content/public/browser/navigation_entry.h" 14 #include "content/public/browser/navigation_entry.h"
15 #include "content/public/browser/web_contents_observer.h" 15 #include "content/public/browser/web_contents_observer.h"
16 #include "content/public/common/frame_navigate_params.h" 16 #include "content/public/common/frame_navigate_params.h"
17 #include "jni/FeedbackReporter_jni.h" 17 #include "jni/FeedbackReporter_jni.h"
18 #include "url/gurl.h" 18 #include "url/gurl.h"
19 19
20 using base::android::ConvertJavaStringToUTF8;
21 using base::android::ConvertUTF8ToJavaString;
22
23 namespace dom_distiller { 20 namespace dom_distiller {
24 21
25 namespace android { 22 namespace android {
26 23
27 // static 24 // static
28 jboolean IsEnabled(JNIEnv* env, jclass clazz) { 25 jboolean IsEnabled(JNIEnv* env, jclass clazz) {
29 return CommandLine::ForCurrentProcess()->HasSwitch( 26 return CommandLine::ForCurrentProcess()->HasSwitch(
30 switches::kEnableDomDistiller); 27 switches::kEnableDomDistiller);
31 } 28 }
32 29
33 // static 30 // static
34 void ReportQuality(JNIEnv* env, jclass clazz, jboolean j_good) { 31 void ReportQuality(JNIEnv* env, jclass clazz, jboolean j_good) {
35 FeedbackReporter::ReportQuality(j_good); 32 FeedbackReporter::ReportQuality(j_good);
36 } 33 }
37 34
38 // static
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);
42 if (!url.is_valid())
43 return false;
44 return url.scheme() == chrome::kDomDistillerScheme;
45 }
46
47 FeedbackReporterAndroid::FeedbackReporterAndroid(JNIEnv* env, jobject obj) 35 FeedbackReporterAndroid::FeedbackReporterAndroid(JNIEnv* env, jobject obj)
48 : weak_java_feedback_reporter_(env, obj) {} 36 : weak_java_feedback_reporter_(env, obj) {}
49 37
50 FeedbackReporterAndroid::~FeedbackReporterAndroid() {} 38 FeedbackReporterAndroid::~FeedbackReporterAndroid() {}
51 39
52 void FeedbackReporterAndroid::Destroy(JNIEnv* env, jobject obj) { delete this; } 40 void FeedbackReporterAndroid::Destroy(JNIEnv* env, jobject obj) { delete this; }
53 41
54 void FeedbackReporterAndroid::ReplaceWebContents(JNIEnv* env, 42 void FeedbackReporterAndroid::ReplaceWebContents(JNIEnv* env,
55 jobject obj, 43 jobject obj,
56 jobject jweb_contents) { 44 jobject jweb_contents) {
57 content::WebContents* web_contents = 45 content::WebContents* web_contents =
58 content::WebContents::FromJavaWebContents(jweb_contents); 46 content::WebContents::FromJavaWebContents(jweb_contents);
59 Observe(web_contents); 47 Observe(web_contents);
60 } 48 }
61 49
62 void FeedbackReporterAndroid::DidNavigateMainFrame( 50 void FeedbackReporterAndroid::DidNavigateMainFrame(
63 const content::LoadCommittedDetails& details, 51 const content::LoadCommittedDetails& details,
64 const content::FrameNavigateParams& params) { 52 const content::FrameNavigateParams& params) {
65 JNIEnv* env = base::android::AttachCurrentThread(); 53 JNIEnv* env = base::android::AttachCurrentThread();
66 ScopedJavaLocalRef<jobject> jobj = weak_java_feedback_reporter_.get(env); 54 ScopedJavaLocalRef<jobject> jobj = weak_java_feedback_reporter_.get(env);
67 if (jobj.is_null()) 55 if (jobj.is_null())
68 return; 56 return;
69 base::android::ScopedJavaLocalRef<jstring> j_current_overlay_url_str = 57 Java_FeedbackReporter_dismissOverlay(env, jobj.obj());
70 Java_FeedbackReporter_getCurrentOverlayUrl(env, jobj.obj()); 58 GURL url = details.entry->GetURL();
71 std::string current_overlay_url_str = 59 if (dom_distiller::url_utils::IsUrlReportable(
72 ConvertJavaStringToUTF8(j_current_overlay_url_str); 60 chrome::kDomDistillerScheme, url))
nyquist 2014/04/01 20:09:14 Since the conditional is two lines now, could you
Sungmann Cho 2014/04/01 22:12:00 Done.
73 GURL current_overlay_url(current_overlay_url_str); 61 Java_FeedbackReporter_showOverlay(env, jobj.obj());
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());
77 } 62 }
78 63
79 jlong Init(JNIEnv* env, jobject obj) { 64 jlong Init(JNIEnv* env, jobject obj) {
80 FeedbackReporterAndroid* reporter = new FeedbackReporterAndroid(env, obj); 65 FeedbackReporterAndroid* reporter = new FeedbackReporterAndroid(env, obj);
81 return reinterpret_cast<intptr_t>(reporter); 66 return reinterpret_cast<intptr_t>(reporter);
82 } 67 }
83 68
84 // static 69 // static
85 bool RegisterFeedbackReporter(JNIEnv* env) { return RegisterNativesImpl(env); } 70 bool RegisterFeedbackReporter(JNIEnv* env) { return RegisterNativesImpl(env); }
86 71
87 } // namespace android 72 } // namespace android
88 73
89 } // namespace dom_distiller 74 } // namespace dom_distiller
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698