PageLoadDidChangeLocationWithinPageForFrame.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*
  2. * Copyright (C) 2010 Apple Inc. All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions
  6. * are met:
  7. * 1. Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * 2. Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. *
  13. * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
  14. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  15. * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  16. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
  17. * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  18. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  19. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  20. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  21. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  22. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  23. * THE POSSIBILITY OF SUCH DAMAGE.
  24. */
  25. #include "config.h"
  26. #include "PlatformUtilities.h"
  27. #include "PlatformWebView.h"
  28. #include <WebKit2/WKRetainPtr.h>
  29. namespace TestWebKitAPI {
  30. static void nullJavaScriptCallback(WKSerializedScriptValueRef, WKErrorRef error, void*)
  31. {
  32. }
  33. static bool didFinishLoad;
  34. static void didFinishLoadForFrame(WKPageRef, WKFrameRef, WKTypeRef, const void*)
  35. {
  36. didFinishLoad = true;
  37. }
  38. static bool didPopStateWithinPage;
  39. static bool didChangeLocationWithinPage;
  40. static void didSameDocumentNavigationForFrame(WKPageRef, WKFrameRef, WKSameDocumentNavigationType type, WKTypeRef, const void*)
  41. {
  42. if (!didPopStateWithinPage) {
  43. EXPECT_EQ(static_cast<uint32_t>(kWKSameDocumentNavigationSessionStatePop), type);
  44. EXPECT_FALSE(didChangeLocationWithinPage);
  45. didPopStateWithinPage = true;
  46. return;
  47. }
  48. EXPECT_EQ(static_cast<uint32_t>(kWKSameDocumentNavigationAnchorNavigation), type);
  49. didChangeLocationWithinPage = true;
  50. }
  51. TEST(WebKit2, PageLoadDidChangeLocationWithinPageForFrame)
  52. {
  53. WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate());
  54. PlatformWebView webView(context.get());
  55. WKPageLoaderClient loaderClient;
  56. memset(&loaderClient, 0, sizeof(loaderClient));
  57. loaderClient.didFinishLoadForFrame = didFinishLoadForFrame;
  58. loaderClient.didSameDocumentNavigationForFrame = didSameDocumentNavigationForFrame;
  59. WKPageSetPageLoaderClient(webView.page(), &loaderClient);
  60. WKRetainPtr<WKURLRef> url(AdoptWK, Util::createURLForResource("file-with-anchor", "html"));
  61. WKPageLoadURL(webView.page(), url.get());
  62. Util::run(&didFinishLoad);
  63. WKRetainPtr<WKURLRef> initialURL = adoptWK(WKFrameCopyURL(WKPageGetMainFrame(webView.page())));
  64. WKPageRunJavaScriptInMainFrame(webView.page(), Util::toWK("clickLink()").get(), 0, nullJavaScriptCallback);
  65. Util::run(&didChangeLocationWithinPage);
  66. WKRetainPtr<WKURLRef> urlAfterAnchorClick = adoptWK(WKFrameCopyURL(WKPageGetMainFrame(webView.page())));
  67. EXPECT_FALSE(WKURLIsEqual(initialURL.get(), urlAfterAnchorClick.get()));
  68. }
  69. } // namespace TestWebKitAPI