blob: 3033b4dc1d9ead9681c1535cd70aaa54e4a3d8d7 [file] [log] [blame]
// 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;
import android.os.RemoteException;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.weblayer_private.interfaces.NewTabType;
/**
* Owns the c++ NewTabCallback class, which is responsible for forwarding all
* NewTabCallback calls to this class, which in turn forwards to ITabClient.
*/
@JNINamespace("weblayer")
public final class NewTabCallbackProxy {
private long mNativeNewTabCallbackProxy;
private final TabImpl mTab;
public NewTabCallbackProxy(TabImpl tab) {
mTab = tab;
mNativeNewTabCallbackProxy =
NewTabCallbackProxyJni.get().createNewTabCallbackProxy(this, tab.getNativeTab());
}
public void destroy() {
NewTabCallbackProxyJni.get().deleteNewTabCallbackProxy(mNativeNewTabCallbackProxy);
mNativeNewTabCallbackProxy = 0;
}
@NewTabType
private static int implTypeToJavaType(@ImplNewTabType int type) {
switch (type) {
case ImplNewTabType.FOREGROUND:
return NewTabType.FOREGROUND_TAB;
case ImplNewTabType.BACKGROUND:
return NewTabType.BACKGROUND_TAB;
case ImplNewTabType.NEW_POPUP:
return NewTabType.NEW_POPUP;
case ImplNewTabType.NEW_WINDOW:
return NewTabType.NEW_WINDOW;
}
assert false;
return NewTabType.FOREGROUND_TAB;
}
@CalledByNative
public void onNewTab(TabImpl tab, @ImplNewTabType int mode) throws RemoteException {
// This class should only be created while the tab is attached to a fragment.
assert mTab.getBrowser() != null;
assert mTab.getBrowser().equals(tab.getBrowser());
mTab.getClient().onNewTab(tab.getId(), implTypeToJavaType(mode));
}
@NativeMethods
interface Natives {
long createNewTabCallbackProxy(NewTabCallbackProxy proxy, long tab);
void deleteNewTabCallbackProxy(long proxy);
}
}