| // Copyright 2022 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. | 
 |  | 
 | #include "chrome/browser/android/historical_tab_saver.h" | 
 |  | 
 | #include "base/android/jni_android.h" | 
 | #include "base/test/gtest_util.h" | 
 | #include "chrome/browser/android/tab_android.h" | 
 | #include "chrome/browser/tab/web_contents_state.h" | 
 | #include "chrome/test/base/android/android_browser_test.h" | 
 | #include "chrome/test/base/chrome_test_utils.h" | 
 | #include "content/public/test/browser_test.h" | 
 | #include "net/test/embedded_test_server/embedded_test_server.h" | 
 |  | 
 | namespace historical_tab_saver { | 
 |  | 
 | namespace { | 
 |  | 
 | class HistoricalTabSaverBrowserTest : public AndroidBrowserTest { | 
 |  protected: | 
 |   HistoricalTabSaverBrowserTest() = default; | 
 |   ~HistoricalTabSaverBrowserTest() override = default; | 
 |  | 
 |   void Navigate() { | 
 |     ASSERT_TRUE(content::NavigateToURL( | 
 |         GetActiveWebContents(), | 
 |         embedded_test_server()->GetURL("/android/google.html"))); | 
 |   } | 
 |  | 
 |   content::WebContents* GetActiveWebContents() { | 
 |     return chrome_test_utils::GetActiveWebContents(this); | 
 |   } | 
 |  | 
 |  private: | 
 |   void SetUpOnMainThread() override { | 
 |     ASSERT_TRUE(embedded_test_server()->Start()); | 
 |     PlatformBrowserTest::SetUpOnMainThread(); | 
 |   } | 
 | }; | 
 |  | 
 | }  // namespace | 
 |  | 
 | // ----- HistoricalTabSaver TESTS BEGIN ----- | 
 |  | 
 | // Test WebContentsByteBuffer non-empty object creation. | 
 | IN_PROC_BROWSER_TEST_F(HistoricalTabSaverBrowserTest, | 
 |                        NonEmptyWebContentsByteBuffer) { | 
 |   JNIEnv* env = base::android::AttachCurrentThread(); | 
 |  | 
 |   Navigate(); | 
 |   base::android::ScopedJavaLocalRef<jobject> result = | 
 |       WebContentsState::GetContentsStateAsByteBuffer(env, | 
 |                                                      GetActiveWebContents()); | 
 |  | 
 |   WebContentsStateByteBuffer web_contents_state = | 
 |       WebContentsStateByteBuffer(env->GetDirectBufferAddress(result.obj()), | 
 |                                  env->GetDirectBufferCapacity(result.obj()), 2); | 
 |  | 
 |   EXPECT_NE(web_contents_state.byte_buffer_data, nullptr); | 
 |   EXPECT_GT(web_contents_state.byte_buffer_size, 0); | 
 |  | 
 |   auto native_contents = WebContentsState::RestoreContentsFromByteBuffer( | 
 |       web_contents_state.byte_buffer_data, web_contents_state.byte_buffer_size, | 
 |       web_contents_state.state_version, true, false); | 
 |  | 
 |   ASSERT_TRUE(native_contents); | 
 | } | 
 |  | 
 | // Test DCHECK crash on null data WebContentsByteBuffer object. | 
 | IN_PROC_BROWSER_TEST_F(HistoricalTabSaverBrowserTest, | 
 |                        NullDataWebContentsByteBufferCrashCheck) { | 
 | #if DCHECK_IS_ON() | 
 |   ASSERT_DCHECK_DEATH_WITH(WebContentsState::RestoreContentsFromByteBuffer( | 
 |                                nullptr, 1, 2, true, false), | 
 |                            "Check failed: data != nullptr (0x0 vs. nullptr)"); | 
 | #endif | 
 | } | 
 |  | 
 | // Test DCHECK crash on empty size WebContentsByteBuffer object. | 
 | IN_PROC_BROWSER_TEST_F(HistoricalTabSaverBrowserTest, | 
 |                        EmptySizeWebContentsByteBufferCrashCheck) { | 
 | #if DCHECK_IS_ON() | 
 |   JNIEnv* env = base::android::AttachCurrentThread(); | 
 |  | 
 |   Navigate(); | 
 |   base::android::ScopedJavaLocalRef<jobject> result = | 
 |       WebContentsState::GetContentsStateAsByteBuffer(env, | 
 |                                                      GetActiveWebContents()); | 
 |  | 
 |   WebContentsStateByteBuffer web_contents_state = | 
 |       WebContentsStateByteBuffer(env->GetDirectBufferAddress(result.obj()), | 
 |                                  env->GetDirectBufferCapacity(result.obj()), 2); | 
 |  | 
 |   ASSERT_DCHECK_DEATH_WITH( | 
 |       WebContentsState::RestoreContentsFromByteBuffer( | 
 |           web_contents_state.byte_buffer_data, 0, 2, true, false), | 
 |       "Check failed: size > 0 (0 vs. 0)"); | 
 | #endif | 
 | } | 
 |  | 
 | }  // namespace historical_tab_saver |