Commit 76f8bf1c authored by Scott Violet's avatar Scott Violet Committed by Commit Bot

weblayer: converts NavigationState to proper enum style

BUG=none
TEST=none

Change-Id: I0bb59ce7360419c14a67074fb5a0d432aac6634d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1906308
Auto-Submit: Scott Violet <sky@chromium.org>
Commit-Queue: John Abd-El-Malek <jam@chromium.org>
Reviewed-by: default avatarJohn Abd-El-Malek <jam@chromium.org>
Cr-Commit-Position: refs/heads/master@{#714032}
parent f5590fbf
......@@ -17,6 +17,7 @@ generate_product_config_srcjar("weblayer_product_config") {
java_cpp_enum("generated_enums") {
sources = [
"//weblayer/public/navigation.h",
"//weblayer/public/new_tab_delegate.h",
"//weblayer/public/profile.h",
]
......@@ -95,6 +96,7 @@ android_library("interfaces_java") {
"org/chromium/weblayer_private/interfaces/APICallException.java",
"org/chromium/weblayer_private/interfaces/BrowserFragmentArgs.java",
"org/chromium/weblayer_private/interfaces/BrowsingDataType.java",
"org/chromium/weblayer_private/interfaces/NavigationState.java",
"org/chromium/weblayer_private/interfaces/NewTabType.java",
"org/chromium/weblayer_private/interfaces/ObjectWrapper.java",
"org/chromium/weblayer_private/interfaces/WebLayerVersion.java",
......
......@@ -13,6 +13,7 @@ import org.chromium.weblayer_private.interfaces.APICallException;
import org.chromium.weblayer_private.interfaces.IClientNavigation;
import org.chromium.weblayer_private.interfaces.INavigation;
import org.chromium.weblayer_private.interfaces.INavigationControllerClient;
import org.chromium.weblayer_private.interfaces.NavigationState;
import java.util.Arrays;
import java.util.List;
......@@ -37,10 +38,28 @@ public final class NavigationImpl extends INavigation.Stub {
return mClientNavigation;
}
@NavigationState
private static int implTypeToJavaType(@ImplNavigationState int type) {
switch (type) {
case ImplNavigationState.WAITING_RESPONSE:
return NavigationState.WAITING_RESPONSE;
case ImplNavigationState.RECEIVING_BYTES:
return NavigationState.RECEIVING_BYTES;
case ImplNavigationState.COMPLETE:
return NavigationState.COMPLETE;
case ImplNavigationState.FAILED:
return NavigationState.FAILED;
}
assert false;
return NavigationState.FAILED;
}
@Override
@NavigationState
public int getState() {
throwIfNativeDestroyed();
return NavigationImplJni.get().getState(mNativeNavigationImpl, NavigationImpl.this);
return implTypeToJavaType(
NavigationImplJni.get().getState(mNativeNavigationImpl, NavigationImpl.this));
}
@Override
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.weblayer_private.interfaces;
import androidx.annotation.IntDef;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@IntDef({NavigationState.WAITING_RESPONSE, NavigationState.RECEIVING_BYTES,
NavigationState.COMPLETE, NavigationState.FAILED})
@Retention(RetentionPolicy.SOURCE)
public @interface NavigationState {
int WAITING_RESPONSE = 0;
int RECEIVING_BYTES = 1;
int COMPLETE = 2;
int FAILED = 3;
}
......@@ -64,9 +64,9 @@ const std::vector<GURL>& NavigationImpl::GetRedirectChain() {
return navigation_handle_->GetRedirectChain();
}
Navigation::State NavigationImpl::GetState() {
NavigationState NavigationImpl::GetState() {
NOTIMPLEMENTED() << "TODO: properly implement this";
return Navigation::State::kWaitingResponse;
return NavigationState::kWaitingResponse;
}
bool NavigationImpl::IsSameDocument() {
......
......@@ -51,7 +51,7 @@ class NavigationImpl : public Navigation {
// Navigation implementation:
GURL GetURL() override;
const std::vector<GURL>& GetRedirectChain() override;
State GetState() override;
NavigationState GetState() override;
bool IsSameDocument() override;
content::NavigationHandle* navigation_handle_;
......
......@@ -33,6 +33,7 @@ android_library("java") {
"org/chromium/weblayer/NavigationCallback.java",
"org/chromium/weblayer/NavigationController.java",
"org/chromium/weblayer/Navigation.java",
"org/chromium/weblayer/NavigationState.java",
"org/chromium/weblayer/NewTabCallback.java",
"org/chromium/weblayer/NewTabType.java",
"org/chromium/weblayer/ObserverList.java",
......
......@@ -21,37 +21,16 @@ import java.util.List;
*/
public final class Navigation extends IClientNavigation.Stub {
private final INavigation mNavigationImpl;
// TODO(sky): investigate using java_cpp_enum.
public enum State {
WAITING_RESPONSE,
RECEIVING_BYTES,
COMPLETE,
FAILED,
}
private static State ipcStateToState(int state) {
switch (state) {
case 0:
return State.WAITING_RESPONSE;
case 1:
return State.RECEIVING_BYTES;
case 2:
return State.COMPLETE;
case 3:
return State.FAILED;
default:
throw new IllegalArgumentException("Unexpected state " + state);
}
}
Navigation(INavigation impl) {
mNavigationImpl = impl;
}
public State getState() {
@NavigationState
public int getState() {
ThreadCheck.ensureOnUiThread();
try {
return ipcStateToState(mNavigationImpl.getState());
return mNavigationImpl.getState();
} catch (RemoteException e) {
throw new APICallException(e);
}
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.weblayer;
import androidx.annotation.IntDef;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* @hide
*/
@IntDef({NavigationState.WAITING_RESPONSE, NavigationState.RECEIVING_BYTES,
NavigationState.COMPLETE, NavigationState.FAILED})
@Retention(RetentionPolicy.SOURCE)
public @interface NavigationState {
int WAITING_RESPONSE =
org.chromium.weblayer_private.interfaces.NavigationState.WAITING_RESPONSE;
int RECEIVING_BYTES = org.chromium.weblayer_private.interfaces.NavigationState.RECEIVING_BYTES;
int COMPLETE = org.chromium.weblayer_private.interfaces.NavigationState.COMPLETE;
int FAILED = org.chromium.weblayer_private.interfaces.NavigationState.FAILED;
}
......@@ -11,6 +11,17 @@ class GURL;
namespace weblayer {
// These types are sent over IPC and across different versions. Never remove
// or change the order.
// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.weblayer_private
// GENERATED_JAVA_CLASS_NAME_OVERRIDE: ImplNavigationState
enum class NavigationState {
kWaitingResponse = 0,
kReceivingBytes = 1,
kComplete = 2,
kFailed = 3,
};
class Navigation {
public:
virtual ~Navigation() {}
......@@ -24,16 +35,7 @@ class Navigation {
// there will be one entry in the list).
virtual const std::vector<GURL>& GetRedirectChain() = 0;
// These types are sent over IPC and across different versions. Never remove
// or change the order.
enum State {
kWaitingResponse = 0,
kReceivingBytes = 1,
kComplete = 2,
kFailed = 3,
};
virtual State GetState() = 0;
virtual NavigationState GetState() = 0;
// Whether the navigation happened without changing document. Examples of
// same document navigations are:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment