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 { ...@@ -428,7 +428,7 @@ public class ReaderModeManager extends TabModelSelectorTabObserver {
return; return;
} }
ReaderModeInfoBar.showReaderModeInfoBar(mTabModelSelector.getCurrentTab()); ReaderModeInfoBar.showReaderModeInfoBar(mTabModelSelector.getCurrentTab(), this);
} }
public void activateReaderMode() { public void activateReaderMode() {
......
...@@ -20,7 +20,6 @@ import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel; ...@@ -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.compositor.bottombar.OverlayPanel.StateChangeReason;
import org.chromium.chrome.browser.dom_distiller.ReaderModeManager; import org.chromium.chrome.browser.dom_distiller.ReaderModeManager;
import org.chromium.chrome.browser.tab.Tab; 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.chrome.browser.ui.messages.infobar.InfoBarCompactLayout;
import org.chromium.components.browser_ui.widget.text.AccessibleTextView; import org.chromium.components.browser_ui.widget.text.AccessibleTextView;
...@@ -97,19 +96,14 @@ public class ReaderModeInfoBar extends InfoBar { ...@@ -97,19 +96,14 @@ public class ReaderModeInfoBar extends InfoBar {
* Create and show the Reader Mode {@link InfoBar}. * Create and show the Reader Mode {@link InfoBar}.
* @param tab The tab that the {@link InfoBar} should be shown in. * @param tab The tab that the {@link InfoBar} should be shown in.
*/ */
public static void showReaderModeInfoBar(Tab tab) { public static void showReaderModeInfoBar(Tab tab, ReaderModeManager manager) {
ReaderModeInfoBarJni.get().create(tab); ReaderModeInfoBarJni.get().create(tab, manager);
} }
/** /** @return The {@link ReaderModeManager} for this infobar. */
* @return The {@link ReaderModeManager} for this infobar.
*/
private ReaderModeManager getReaderModeManager() { private ReaderModeManager getReaderModeManager() {
if (getNativeInfoBarPtr() == 0) return null; if (getNativeInfoBarPtr() == 0) return null;
Tab tab = ReaderModeInfoBarJni.get().getTab(getNativeInfoBarPtr(), ReaderModeInfoBar.this); return ReaderModeInfoBarJni.get().getReaderModeManager(getNativeInfoBarPtr());
if (tab == null || ((TabImpl) tab).getActivity() == null) return null;
return ((TabImpl) tab).getActivity().getReaderModeManager();
} }
/** /**
...@@ -122,7 +116,7 @@ public class ReaderModeInfoBar extends InfoBar { ...@@ -122,7 +116,7 @@ public class ReaderModeInfoBar extends InfoBar {
@NativeMethods @NativeMethods
interface Natives { interface Natives {
void create(Tab tab); void create(Tab tab, ReaderModeManager manager);
Tab getTab(long nativeReaderModeInfoBar, ReaderModeInfoBar caller); ReaderModeManager getReaderModeManager(long nativeReaderModeInfoBar);
} }
} }
...@@ -31,10 +31,13 @@ class ReaderModeInfoBarDelegate : public infobars::InfoBarDelegate { ...@@ -31,10 +31,13 @@ class ReaderModeInfoBarDelegate : public infobars::InfoBarDelegate {
}; };
ReaderModeInfoBar::ReaderModeInfoBar( ReaderModeInfoBar::ReaderModeInfoBar(
std::unique_ptr<ReaderModeInfoBarDelegate> delegate) std::unique_ptr<ReaderModeInfoBarDelegate> delegate,
: InfoBarAndroid(std::move(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() { infobars::InfoBarDelegate* ReaderModeInfoBar::GetDelegate() {
return delegate(); return delegate();
...@@ -45,25 +48,19 @@ ScopedJavaLocalRef<jobject> ReaderModeInfoBar::CreateRenderInfoBar( ...@@ -45,25 +48,19 @@ ScopedJavaLocalRef<jobject> ReaderModeInfoBar::CreateRenderInfoBar(
return Java_ReaderModeInfoBar_create(env); return Java_ReaderModeInfoBar_create(env);
} }
base::android::ScopedJavaLocalRef<jobject> ReaderModeInfoBar::GetTab( base::android::ScopedJavaGlobalRef<jobject>
JNIEnv* env, ReaderModeInfoBar::GetReaderModeManager(JNIEnv* env) {
const JavaParamRef<jobject>& obj) { return _j_reader_mode_manager;
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;
} }
void ReaderModeInfoBar::ProcessButton(int action) {} void ReaderModeInfoBar::ProcessButton(int action) {}
void JNI_ReaderModeInfoBar_Create(JNIEnv* env, 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( InfoBarService* service = InfoBarService::FromWebContents(
TabAndroid::GetNativeTab(env, j_tab)->web_contents()); TabAndroid::GetNativeTab(env, j_tab)->web_contents());
service->AddInfoBar(std::make_unique<ReaderModeInfoBar>( service->AddInfoBar(std::make_unique<ReaderModeInfoBar>(
std::make_unique<ReaderModeInfoBarDelegate>())); std::make_unique<ReaderModeInfoBarDelegate>(), j_manager));
} }
...@@ -16,12 +16,11 @@ class ReaderModeInfoBarDelegate; ...@@ -16,12 +16,11 @@ class ReaderModeInfoBarDelegate;
class ReaderModeInfoBar : public InfoBarAndroid { class ReaderModeInfoBar : public InfoBarAndroid {
public: public:
explicit ReaderModeInfoBar( explicit ReaderModeInfoBar(
std::unique_ptr<ReaderModeInfoBarDelegate> delegate); std::unique_ptr<ReaderModeInfoBarDelegate> delegate,
const base::android::JavaParamRef<jobject>& j_manager);
~ReaderModeInfoBar() override; ~ReaderModeInfoBar() override;
base::android::ScopedJavaLocalRef<jobject> GetTab( base::android::ScopedJavaGlobalRef<jobject> GetReaderModeManager(JNIEnv* env);
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
protected: protected:
infobars::InfoBarDelegate* GetDelegate(); infobars::InfoBarDelegate* GetDelegate();
...@@ -32,6 +31,7 @@ class ReaderModeInfoBar : public InfoBarAndroid { ...@@ -32,6 +31,7 @@ class ReaderModeInfoBar : public InfoBarAndroid {
JNIEnv* env) override; JNIEnv* env) override;
private: private:
base::android::ScopedJavaGlobalRef<jobject> _j_reader_mode_manager;
DISALLOW_COPY_AND_ASSIGN(ReaderModeInfoBar); 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