InjectedBundlePageMac.mm 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*
  2. * Copyright (C) 2012 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. #import "config.h"
  26. #import "InjectedBundlePage.h"
  27. #import "StringFunctions.h"
  28. #import <WebKit2/WKBundleFrame.h>
  29. #import <WebKit2/WKURLCF.h>
  30. #import <WebKitSystemInterface.h>
  31. #import <wtf/RetainPtr.h>
  32. #import <wtf/text/StringBuilder.h>
  33. #import <wtf/text/WTFString.h>
  34. namespace WTR {
  35. using namespace WTF;
  36. #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070
  37. static String testPathFromURL(WKURLRef url)
  38. {
  39. RetainPtr<CFURLRef> cfURL = adoptCF(WKURLCopyCFURL(kCFAllocatorDefault, url));
  40. if (!cfURL)
  41. return String();
  42. RetainPtr<CFStringRef> schemeCFString = adoptCF(CFURLCopyScheme(cfURL.get()));
  43. RetainPtr<CFStringRef> pathCFString = adoptCF(CFURLCopyPath(cfURL.get()));
  44. String schemeString(schemeCFString.get());
  45. String pathString(pathCFString.get());
  46. if (equalIgnoringCase(schemeString, "file")) {
  47. String layoutTests("/LayoutTests/");
  48. size_t layoutTestsOffset = pathString.find(layoutTests);
  49. if (layoutTestsOffset == notFound)
  50. return String();
  51. return pathString.substring(layoutTestsOffset + layoutTests.length());
  52. }
  53. if (!equalIgnoringCase(schemeString, "http") && !equalIgnoringCase(schemeString, "https"))
  54. return String();
  55. RetainPtr<CFStringRef> hostCFString = adoptCF(CFURLCopyHostName(cfURL.get()));
  56. String hostString(hostCFString.get());
  57. if (hostString == "127.0.0.1" && (CFURLGetPortNumber(cfURL.get()) == 8000 || CFURLGetPortNumber(cfURL.get()) == 8443))
  58. return pathString;
  59. return String();
  60. }
  61. #endif
  62. void InjectedBundlePage::platformDidStartProvisionalLoadForFrame(WKBundleFrameRef frame)
  63. {
  64. #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070
  65. if (!WKBundleFrameIsMainFrame(frame))
  66. return;
  67. WKRetainPtr<WKURLRef> mainFrameURL = adoptWK(WKBundleFrameCopyProvisionalURL(frame));
  68. String testPath = testPathFromURL(mainFrameURL.get());
  69. if (!testPath.isNull()) {
  70. StringBuilder builder;
  71. builder.appendLiteral("CRASHING TEST: ");
  72. builder.append(testPath);
  73. WKSetCrashReportApplicationSpecificInformation(builder.toString().createCFString().get());
  74. }
  75. #endif
  76. }
  77. } // namespace WTR