| Index: chrome/browser/android/feedback/connectivity_checker.cc
|
| diff --git a/chrome/browser/android/feedback/connectivity_checker.cc b/chrome/browser/android/feedback/connectivity_checker.cc
|
| index 21f5b815679c6e007a26f5dba1de40c94e0015e5..7c7fc6fcf2ed726d2deb178d30bf5e83939cf0ac 100644
|
| --- a/chrome/browser/android/feedback/connectivity_checker.cc
|
| +++ b/chrome/browser/android/feedback/connectivity_checker.cc
|
| @@ -25,25 +25,39 @@ namespace chrome {
|
| namespace android {
|
|
|
| namespace {
|
| +// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.feedback
|
| +// GENERATED_JAVA_PREFIX_TO_STRIP: CONNECTIVITY_CHECK_RESULT_
|
| +enum ConnectivityCheckResult {
|
| + CONNECTIVITY_CHECK_RESULT_UNKNOWN = 0,
|
| + CONNECTIVITY_CHECK_RESULT_CONNECTED = 1,
|
| + CONNECTIVITY_CHECK_RESULT_NOT_CONNECTED = 2,
|
| + CONNECTIVITY_CHECK_RESULT_TIMEOUT = 3,
|
| + CONNECTIVITY_CHECK_RESULT_ERROR = 4,
|
| + CONNECTIVITY_CHECK_RESULT_END = 5
|
| +};
|
|
|
| -void ExecuteCallback(jobject callback, bool connected) {
|
| +void ExecuteCallback(jobject callback, ConnectivityCheckResult result) {
|
| + CHECK(result >= CONNECTIVITY_CHECK_RESULT_UNKNOWN);
|
| + CHECK(result < CONNECTIVITY_CHECK_RESULT_END);
|
| Java_ConnectivityChecker_executeCallback(base::android::AttachCurrentThread(),
|
| - callback, connected);
|
| + callback, result);
|
| }
|
|
|
| void ExecuteCallbackFromRef(
|
| base::android::ScopedJavaGlobalRef<jobject>* callback,
|
| - bool connected) {
|
| - ExecuteCallback(callback->obj(), connected);
|
| + ConnectivityCheckResult result) {
|
| + ExecuteCallback(callback->obj(), result);
|
| }
|
|
|
| -void PostCallback(JNIEnv* env, jobject j_callback, bool connected) {
|
| +void PostCallback(JNIEnv* env,
|
| + jobject j_callback,
|
| + ConnectivityCheckResult result) {
|
| base::MessageLoop::current()->PostTask(
|
| FROM_HERE,
|
| base::Bind(&ExecuteCallbackFromRef,
|
| base::Owned(new base::android::ScopedJavaGlobalRef<jobject>(
|
| env, j_callback)),
|
| - connected));
|
| + result));
|
| }
|
|
|
| // A utility class for checking if the device is currently connected to the
|
| @@ -62,8 +76,9 @@ class ConnectivityChecker : public net::URLFetcherDelegate {
|
| // net::URLFetcherDelegate implementation:
|
| void OnURLFetchComplete(const net::URLFetcher* source) override;
|
|
|
| - // Cancels the URLFetcher, and triggers the callback with a negative result.
|
| - void Cancel();
|
| + // Cancels the URLFetcher, and triggers the callback with a negative result
|
| + // and the timeout flag set.
|
| + void OnTimeout();
|
|
|
| private:
|
| // The context in which the connectivity check is performed.
|
| @@ -98,7 +113,12 @@ void ConnectivityChecker::OnURLFetchComplete(const net::URLFetcher* source) {
|
| int response_code = source->GetResponseCode();
|
|
|
| bool connected = status.is_success() && response_code == net::HTTP_NO_CONTENT;
|
| - ExecuteCallback(java_callback_.obj(), connected);
|
| + if (connected) {
|
| + ExecuteCallback(java_callback_.obj(), CONNECTIVITY_CHECK_RESULT_CONNECTED);
|
| + } else {
|
| + ExecuteCallback(java_callback_.obj(),
|
| + CONNECTIVITY_CHECK_RESULT_NOT_CONNECTED);
|
| + }
|
|
|
| base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
|
| }
|
| @@ -129,15 +149,15 @@ void ConnectivityChecker::StartAsyncCheck() {
|
| url_fetcher_->Start();
|
| expiration_timer_.reset(new base::OneShotTimer<ConnectivityChecker>());
|
| expiration_timer_->Start(FROM_HERE, timeout_, this,
|
| - &ConnectivityChecker::Cancel);
|
| + &ConnectivityChecker::OnTimeout);
|
| }
|
|
|
| -void ConnectivityChecker::Cancel() {
|
| +void ConnectivityChecker::OnTimeout() {
|
| if (is_being_destroyed_)
|
| return;
|
| is_being_destroyed_ = true;
|
| url_fetcher_.reset();
|
| - ExecuteCallback(java_callback_.obj(), false);
|
| + ExecuteCallback(java_callback_.obj(), CONNECTIVITY_CHECK_RESULT_TIMEOUT);
|
| base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
|
| }
|
|
|
| @@ -151,12 +171,12 @@ void CheckConnectivity(JNIEnv* env,
|
| jobject j_callback) {
|
| Profile* profile = ProfileAndroid::FromProfileAndroid(j_profile);
|
| if (!profile) {
|
| - PostCallback(env, j_callback, false);
|
| + PostCallback(env, j_callback, CONNECTIVITY_CHECK_RESULT_ERROR);
|
| return;
|
| }
|
| GURL url(base::android::ConvertJavaStringToUTF8(env, j_url));
|
| if (!url.is_valid()) {
|
| - PostCallback(env, j_callback, false);
|
| + PostCallback(env, j_callback, CONNECTIVITY_CHECK_RESULT_ERROR);
|
| return;
|
| }
|
|
|
| @@ -167,6 +187,11 @@ void CheckConnectivity(JNIEnv* env,
|
| connectivity_checker->StartAsyncCheck();
|
| }
|
|
|
| +jboolean IsUrlValid(JNIEnv* env, jclass clazz, jstring j_url) {
|
| + GURL url(base::android::ConvertJavaStringToUTF8(env, j_url));
|
| + return url.is_valid();
|
| +}
|
| +
|
| bool RegisterConnectivityChecker(JNIEnv* env) {
|
| return RegisterNativesImpl(env);
|
| }
|
|
|