| Index: ios/web/web_state/ui/crw_web_controller_unittest.mm
|
| diff --git a/ios/web/web_state/ui/crw_web_controller_unittest.mm b/ios/web/web_state/ui/crw_web_controller_unittest.mm
|
| index 3a52ccdcb6c4c7aa005c2f8dace62358b52d9b78..51541e2a7a36740a546260322c36460dd15a6e3d 100644
|
| --- a/ios/web/web_state/ui/crw_web_controller_unittest.mm
|
| +++ b/ios/web/web_state/ui/crw_web_controller_unittest.mm
|
| @@ -10,6 +10,7 @@
|
|
|
| #include "base/ios/ios_util.h"
|
| #import "base/mac/scoped_nsobject.h"
|
| +#include "base/strings/utf_string_conversions.h"
|
| #import "base/test/ios/wait_util.h"
|
| #import "ios/testing/ocmock_complex_type_helper.h"
|
| #import "ios/web/navigation/crw_session_controller.h"
|
| @@ -992,6 +993,41 @@ TEST_F(CRWWebControllerWindowOpenTest, BlockPopup) {
|
| EXPECT_FALSE([delegate_ initiatedByUser]);
|
| };
|
|
|
| +// Tests page title changes.
|
| +typedef web::WebTestWithWebState CRWWebControllerTitleTest;
|
| +TEST_F(CRWWebControllerTitleTest, TitleChange) {
|
| + // Observes and waits for TitleWasSet call.
|
| + class TitleObserver : public web::WebStateObserver {
|
| + public:
|
| + explicit TitleObserver(web::WebState* web_state)
|
| + : web::WebStateObserver(web_state) {}
|
| + // Returns number of times |TitleWasSet| was called.
|
| + int title_change_count() { return title_change_count_; }
|
| + // WebStateObserver overrides:
|
| + void TitleWasSet() override { title_change_count_++; }
|
| +
|
| + private:
|
| + int title_change_count_ = 0;
|
| + };
|
| +
|
| + TitleObserver observer(web_state());
|
| + ASSERT_EQ(0, observer.title_change_count());
|
| +
|
| + // Expect TitleWasSet callback after the page is loaded.
|
| + LoadHtml(@"<title>Title1</title>");
|
| + EXPECT_EQ("Title1", base::UTF16ToUTF8(web_state()->GetTitle()));
|
| + EXPECT_EQ(1, observer.title_change_count());
|
| +
|
| + // Expect at least one more TitleWasSet callback after changing title via
|
| + // JavaScript. On iOS 10 WKWebView fires 3 callbacks after JS excucution
|
| + // with the following title changes: "Title2", "" and "Title2".
|
| + // TODO(crbug.com/696104): There should be only 2 calls of TitleWasSet.
|
| + // Fix expecteation when WKWebView stops sending extra KVO calls.
|
| + ExecuteJavaScript(@"window.document.title = 'Title2';");
|
| + EXPECT_EQ("Title2", base::UTF16ToUTF8(web_state()->GetTitle()));
|
| + EXPECT_GE(observer.title_change_count(), 2);
|
| +};
|
| +
|
| // Fixture class to test WKWebView crashes.
|
| class CRWWebControllerWebProcessTest : public web::WebTestWithWebController {
|
| protected:
|
|
|