|  | // Copyright 2017 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 "components/app_modal/javascript_dialog_manager.h" | 
|  |  | 
|  | // #include <string> | 
|  |  | 
|  | #include "base/strings/utf_string_conversions.h" | 
|  | #include "build/build_config.h" | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  |  | 
|  | namespace app_modal { | 
|  |  | 
|  | TEST(JavaScriptDialogManagerTest, GetTitle) { | 
|  | struct Case { | 
|  | const char* parent_url; | 
|  | const char* alerting_url; | 
|  | const char* expected; | 
|  | const char* expected_android; | 
|  | } cases[] = { | 
|  | // Standard main frame alert. | 
|  | {"http://foo.com/", "http://foo.com/", "foo.com says", "foo.com says"}, | 
|  |  | 
|  | // Subframe alert from the same origin. | 
|  | {"http://foo.com/1", "http://foo.com/2", "foo.com says", "foo.com says"}, | 
|  | // Subframe alert from a different origin. | 
|  | {"http://foo.com/", "http://bar.com/", "An embedded page at bar.com says", | 
|  | "An embedded page at bar.com says"}, | 
|  |  | 
|  | // file: | 
|  | // - main frame: | 
|  | {"file:///path/to/page.html", "file:///path/to/page.html", | 
|  | "This page says", "This page says"}, | 
|  | // - subframe: | 
|  | {"http://foo.com/", "file:///path/to/page.html", | 
|  | "An embedded page on this page says", | 
|  | "An embedded page on this page says"}, | 
|  |  | 
|  | // ftp: | 
|  | // - main frame: | 
|  | {"ftp://foo.com/path/to/page.html", "ftp://foo.com/path/to/page.html", | 
|  | "foo.com says", "ftp://foo.com says"}, | 
|  | // - subframe: | 
|  | {"http://foo.com/", "ftp://foo.com/path/to/page.html", | 
|  | "An embedded page at foo.com says", | 
|  | "An embedded page at ftp://foo.com says"}, | 
|  |  | 
|  | // data: | 
|  | // - main frame: | 
|  | {"data:blahblah", "data:blahblah", "This page says", "This page says"}, | 
|  | // - subframe: | 
|  | {"http://foo.com/", "data:blahblah", "An embedded page on this page says", | 
|  | "An embedded page on this page says"}, | 
|  |  | 
|  | // javascript: | 
|  | // - main frame: | 
|  | {"javascript:abc", "javascript:abc", "This page says", "This page says"}, | 
|  | // - subframe: | 
|  | {"http://foo.com/", "javascript:abc", | 
|  | "An embedded page on this page says", | 
|  | "An embedded page on this page says"}, | 
|  |  | 
|  | // about: | 
|  | // - main frame: | 
|  | {"about:blank", "about:blank", "This page says", "This page says"}, | 
|  | // - subframe: | 
|  | {"http://foo.com/", "about:blank", "An embedded page on this page says", | 
|  | "An embedded page on this page says"}, | 
|  |  | 
|  | // blob: | 
|  | // - main frame: | 
|  | {"blob:http://foo.com/66666666-6666-6666-6666-666666666666", | 
|  | "blob:http://foo.com/66666666-6666-6666-6666-666666666666", | 
|  | "foo.com says", "foo.com says"}, | 
|  | // - subframe: | 
|  | {"http://bar.com/", | 
|  | "blob:http://foo.com/66666666-6666-6666-6666-666666666666", | 
|  | "An embedded page at foo.com says", "An embedded page at foo.com says"}, | 
|  |  | 
|  | // filesystem: | 
|  | // - main frame: | 
|  | {"filesystem:http://foo.com/bar.html", | 
|  | "filesystem:http://foo.com/bar.html", "foo.com says", "foo.com says"}, | 
|  | // - subframe: | 
|  | {"http://bar.com/", "filesystem:http://foo.com/bar.html", | 
|  | "An embedded page at foo.com says", "An embedded page at foo.com says"}, | 
|  | }; | 
|  |  | 
|  | for (const auto& test_case : cases) { | 
|  | base::string16 result = JavaScriptDialogManager::GetTitleImpl( | 
|  | GURL(test_case.parent_url), GURL(test_case.alerting_url)); | 
|  | #if defined(OS_ANDROID) | 
|  | EXPECT_EQ(test_case.expected_android, base::UTF16ToUTF8(result)); | 
|  | #else | 
|  | EXPECT_EQ(test_case.expected, base::UTF16ToUTF8(result)); | 
|  | #endif | 
|  | } | 
|  | } | 
|  |  | 
|  | }  // namespace app_modal |