Changeset 207579 in webkit


Ignore:
Timestamp:
Oct 19, 2016 4:55:30 PM (8 years ago)
Author:
Chris Dumez
Message:

[WK2] Expose suggested filename via WKBundleHitTestResult API
https://bugs.webkit.org/show_bug.cgi?id=163693
<rdar://problem/28840734>

Reviewed by Anders Carlsson.

Expose suggested filename via WKBundleHitTestResult API. The implementation
currently relies on the 'download' attribute on anchor / area elements
that we recently started supporting.

  • WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:

(WKBundleHitTestResultCopyLinkSuggestedFilename):

  • WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h:
  • WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:

(WebKit::InjectedBundleHitTestResult::create):
(WebKit::InjectedBundleHitTestResult::mediaType):
(WebKit::InjectedBundleHitTestResult::linkSuggestedFilename):
(WebKit::InjectedBundleHitTestResult::imageRect):

  • WebProcess/InjectedBundle/InjectedBundleHitTestResult.h:
Location:
trunk/Source/WebKit2
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r207568 r207579  
     12016-10-19  Chris Dumez  <cdumez@apple.com>
     2
     3        [WK2] Expose suggested filename via WKBundleHitTestResult API
     4        https://bugs.webkit.org/show_bug.cgi?id=163693
     5        <rdar://problem/28840734>
     6
     7        Reviewed by Anders Carlsson.
     8
     9        Expose suggested filename via WKBundleHitTestResult API. The implementation
     10        currently relies on the 'download' attribute on anchor / area elements
     11        that we recently started supporting.
     12
     13        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:
     14        (WKBundleHitTestResultCopyLinkSuggestedFilename):
     15        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h:
     16        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
     17        (WebKit::InjectedBundleHitTestResult::create):
     18        (WebKit::InjectedBundleHitTestResult::mediaType):
     19        (WebKit::InjectedBundleHitTestResult::linkSuggestedFilename):
     20        (WebKit::InjectedBundleHitTestResult::imageRect):
     21        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.h:
     22
    1232016-10-19  Ryan Haddad  <ryanhaddad@apple.com>
    224
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp

    r202242 r207579  
    121121    return toCopiedAPI(toImpl(hitTestResultRef)->linkTitle());
    122122}
     123
     124WKStringRef WKBundleHitTestResultCopyLinkSuggestedFilename(WKBundleHitTestResultRef hitTestResultRef)
     125{
     126    return toCopiedAPI(toImpl(hitTestResultRef)->linkSuggestedFilename());
     127}
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h

    r176108 r207579  
    6363WK_EXPORT WKStringRef WKBundleHitTestResultCopyLinkLabel(WKBundleHitTestResultRef hitTestResult);
    6464WK_EXPORT WKStringRef WKBundleHitTestResultCopyLinkTitle(WKBundleHitTestResultRef hitTestResult);
     65WK_EXPORT WKStringRef WKBundleHitTestResultCopyLinkSuggestedFilename(WKBundleHitTestResultRef hitTestResult);
    6566
    6667#ifdef __cplusplus
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp

    r186566 r207579  
    3535#include <WebCore/FrameLoader.h>
    3636#include <WebCore/FrameView.h>
     37#include <WebCore/HTMLAnchorElement.h>
     38#include <WebCore/HTMLNames.h>
    3739#include <WebCore/URL.h>
    3840#include <wtf/text/WTFString.h>
     
    4244namespace WebKit {
    4345
    44 Ref<InjectedBundleHitTestResult> InjectedBundleHitTestResult::create(const WebCore::HitTestResult& hitTestResult)
     46Ref<InjectedBundleHitTestResult> InjectedBundleHitTestResult::create(const HitTestResult& hitTestResult)
    4547{
    4648    return adoptRef(*new InjectedBundleHitTestResult(hitTestResult));
     
    119121    return BundleHitTestResultMediaTypeNone;
    120122#else
    121     WebCore::Node* node = m_hitTestResult.innerNonSharedNode();
     123    Node* node = m_hitTestResult.innerNonSharedNode();
    122124    if (!is<Element>(*node))
    123125        return BundleHitTestResultMediaTypeNone;
     
    140142}
    141143
    142 WebCore::IntRect InjectedBundleHitTestResult::imageRect() const
     144String InjectedBundleHitTestResult::linkSuggestedFilename() const
    143145{
    144     WebCore::IntRect imageRect = m_hitTestResult.imageRect();
     146    auto* urlElement = m_hitTestResult.URLElement();
     147    if (!is<HTMLAnchorElement>(urlElement))
     148        return String();
     149    return urlElement->attributeWithoutSynchronization(HTMLNames::downloadAttr);
     150}
     151
     152IntRect InjectedBundleHitTestResult::imageRect() const
     153{
     154    IntRect imageRect = m_hitTestResult.imageRect();
    145155    if (imageRect.isEmpty())
    146156        return imageRect;
    147157       
    148     // The image rect in WebCore::HitTestResult is in frame coordinates, but we need it in WKView
     158    // The image rect in HitTestResult is in frame coordinates, but we need it in WKView
    149159    // coordinates since WebKit2 clients don't have enough context to do the conversion themselves.
    150160    WebFrame* webFrame = frame();
     
    152162        return imageRect;
    153163   
    154     WebCore::Frame* coreFrame = webFrame->coreFrame();
     164    Frame* coreFrame = webFrame->coreFrame();
    155165    if (!coreFrame)
    156166        return imageRect;
    157167   
    158     WebCore::FrameView* view = coreFrame->view();
     168    FrameView* view = coreFrame->view();
    159169    if (!view)
    160170        return imageRect;
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleHitTestResult.h

    r186566 r207579  
    6161    String linkLabel() const;
    6262    String linkTitle() const;
     63    String linkSuggestedFilename() const;
    6364   
    6465    WebCore::IntRect imageRect() const;
Note: See TracChangeset for help on using the changeset viewer.