Commit 5644e0dd authored by Matt Jones's avatar Matt Jones Committed by Commit Bot

Remove TabImpl and #getActivity from ReaderModeInfoBar

Instead of accessing the ReaderModeManager via Tab and ChromeActivity,
a reference to the manager is passed to the native infobar when it is
created and pulled back up to java when needed. This also allowed for
the removal of the GetTab native method.

Bug: 952703
Change-Id: Iaacbbda08e28d013538d44c9b985020c175de1be
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2122471
Commit-Queue: Wei-Yin Chen (陳威尹) <wychen@chromium.org>
Auto-Submit: Matthew Jones <mdjones@chromium.org>
Reviewed-by: default avatarWei-Yin Chen (陳威尹) <wychen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#754230}
parent 93ba7a3b
......@@ -428,7 +428,7 @@ public class ReaderModeManager extends TabModelSelectorTabObserver {
return;
}
ReaderModeInfoBar.showReaderModeInfoBar(mTabModelSelector.getCurrentTab());
ReaderModeInfoBar.showReaderModeInfoBar(mTabModelSelector.getCurrentTab(), this);
}
public void activateReaderMode() {
......
......@@ -20,7 +20,6 @@ import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel;
import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.StateChangeReason;
import org.chromium.chrome.browser.dom_distiller.ReaderModeManager;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.ui.messages.infobar.InfoBarCompactLayout;
import org.chromium.components.browser_ui.widget.text.AccessibleTextView;
......@@ -97,19 +96,14 @@ public class ReaderModeInfoBar extends InfoBar {
* Create and show the Reader Mode {@link InfoBar}.
* @param tab The tab that the {@link InfoBar} should be shown in.
*/
public static void showReaderModeInfoBar(Tab tab) {
ReaderModeInfoBarJni.get().create(tab);
public static void showReaderModeInfoBar(Tab tab, ReaderModeManager manager) {
ReaderModeInfoBarJni.get().create(tab, manager);
}
/**
* @return The {@link ReaderModeManager} for this infobar.
*/
/** @return The {@link ReaderModeManager} for this infobar. */
private ReaderModeManager getReaderModeManager() {
if (getNativeInfoBarPtr() == 0) return null;
Tab tab = ReaderModeInfoBarJni.get().getTab(getNativeInfoBarPtr(), ReaderModeInfoBar.this);
if (tab == null || ((TabImpl) tab).getActivity() == null) return null;
return ((TabImpl) tab).getActivity().getReaderModeManager();
return ReaderModeInfoBarJni.get().getReaderModeManager(getNativeInfoBarPtr());
}
/**
......@@ -122,7 +116,7 @@ public class ReaderModeInfoBar extends InfoBar {
@NativeMethods
interface Natives {
void create(Tab tab);
Tab getTab(long nativeReaderModeInfoBar, ReaderModeInfoBar caller);
void create(Tab tab, ReaderModeManager manager);
ReaderModeManager getReaderModeManager(long nativeReaderModeInfoBar);
}
}
......@@ -31,10 +31,13 @@ class ReaderModeInfoBarDelegate : public infobars::InfoBarDelegate {
};
ReaderModeInfoBar::ReaderModeInfoBar(
std::unique_ptr<ReaderModeInfoBarDelegate> delegate)
: InfoBarAndroid(std::move(delegate)) {}
std::unique_ptr<ReaderModeInfoBarDelegate> delegate,
const JavaParamRef<jobject>& j_manager)
: InfoBarAndroid(std::move(delegate)), _j_reader_mode_manager(j_manager) {}
ReaderModeInfoBar::~ReaderModeInfoBar() {}
ReaderModeInfoBar::~ReaderModeInfoBar() {
_j_reader_mode_manager.Reset();
}
infobars::InfoBarDelegate* ReaderModeInfoBar::GetDelegate() {
return delegate();
......@@ -45,25 +48,19 @@ ScopedJavaLocalRef<jobject> ReaderModeInfoBar::CreateRenderInfoBar(
return Java_ReaderModeInfoBar_create(env);
}
base::android::ScopedJavaLocalRef<jobject> ReaderModeInfoBar::GetTab(
JNIEnv* env,
const JavaParamRef<jobject>& obj) {
content::WebContents* web_contents =
InfoBarService::WebContentsFromInfoBar(this);
if (!web_contents)
return nullptr;
TabAndroid* tab_android = TabAndroid::FromWebContents(web_contents);
return tab_android ? tab_android->GetJavaObject() : nullptr;
base::android::ScopedJavaGlobalRef<jobject>
ReaderModeInfoBar::GetReaderModeManager(JNIEnv* env) {
return _j_reader_mode_manager;
}
void ReaderModeInfoBar::ProcessButton(int action) {}
void JNI_ReaderModeInfoBar_Create(JNIEnv* env,
const JavaParamRef<jobject>& j_tab) {
const JavaParamRef<jobject>& j_tab,
const JavaParamRef<jobject>& j_manager) {
InfoBarService* service = InfoBarService::FromWebContents(
TabAndroid::GetNativeTab(env, j_tab)->web_contents());
service->AddInfoBar(std::make_unique<ReaderModeInfoBar>(
std::make_unique<ReaderModeInfoBarDelegate>()));
std::make_unique<ReaderModeInfoBarDelegate>(), j_manager));
}
......@@ -16,12 +16,11 @@ class ReaderModeInfoBarDelegate;
class ReaderModeInfoBar : public InfoBarAndroid {
public:
explicit ReaderModeInfoBar(
std::unique_ptr<ReaderModeInfoBarDelegate> delegate);
std::unique_ptr<ReaderModeInfoBarDelegate> delegate,
const base::android::JavaParamRef<jobject>& j_manager);
~ReaderModeInfoBar() override;
base::android::ScopedJavaLocalRef<jobject> GetTab(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
base::android::ScopedJavaGlobalRef<jobject> GetReaderModeManager(JNIEnv* env);
protected:
infobars::InfoBarDelegate* GetDelegate();
......@@ -32,6 +31,7 @@ class ReaderModeInfoBar : public InfoBarAndroid {
JNIEnv* env) override;
private:
base::android::ScopedJavaGlobalRef<jobject> _j_reader_mode_manager;
DISALLOW_COPY_AND_ASSIGN(ReaderModeInfoBar);
};
......
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