Changeset 209198 in webkit


Ignore:
Timestamp:
Dec 1, 2016 1:39:18 PM (7 years ago)
Author:
BJ Burg
Message:

Web Automation: expose navigator.webdriver if the page is controlled by automation
https://bugs.webkit.org/show_bug.cgi?id=165245
<rdar://problem/29449874>

Reviewed by Joseph Pecoraro.

Move the implementation into OpenSource. It's in Modules/webdriver/.

  • CMakeLists.txt:
  • DerivedSources.make:

Add new paths and files.

  • Modules/webdriver/NavigatorWebDriver.cpp: Added.

(WebCore::NavigatorWebDriver::NavigatorWebDriver):
(WebCore::NavigatorWebDriver::~NavigatorWebDriver):
(WebCore::NavigatorWebDriver::supplementName):
(WebCore::NavigatorWebDriver::isControlledByAutomation):
(WebCore::NavigatorWebDriver::from):
(WebCore::JSNavigator::webdriver):

  • Modules/webdriver/NavigatorWebDriver.h: Added.
  • Modules/webdriver/NavigatorWebDriver.idl: Added.
  • WebCore.xcodeproj/project.pbxproj:
Location:
trunk/Source/WebCore
Files:
1 added
4 edited
2 copied
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/CMakeLists.txt

    r209184 r209198  
    3030    "${WEBCORE_DIR}/Modules/webaudio"
    3131    "${WEBCORE_DIR}/Modules/webdatabase"
     32    "${WEBCORE_DIR}/Modules/webdriver"
    3233    "${WEBCORE_DIR}/Modules/websockets"
    3334    "${WEBCORE_DIR}/accessibility"
     
    313314    Modules/webdatabase/SQLTransactionCallback.idl
    314315    Modules/webdatabase/SQLTransactionErrorCallback.idl
     316
     317    Modules/webdriver/NavigatorWebDriver.idl
    315318
    316319    Modules/websockets/CloseEvent.idl
     
    10171020    Modules/webdatabase/SQLTransactionCoordinator.cpp
    10181021    Modules/webdatabase/SQLTransactionStateMachine.cpp
     1022
     1023    Modules/webdriver/NavigatorWebDriver.cpp
    10191024
    10201025    Modules/websockets/ThreadableWebSocketChannel.cpp
  • trunk/Source/WebCore/ChangeLog

    r209197 r209198  
     12016-12-01  Brian Burg  <bburg@apple.com>
     2
     3        Web Automation: expose navigator.webdriver if the page is controlled by automation
     4        https://bugs.webkit.org/show_bug.cgi?id=165245
     5        <rdar://problem/29449874>
     6
     7        Reviewed by Joseph Pecoraro.
     8
     9        Move the implementation into OpenSource. It's in Modules/webdriver/.
     10
     11        * CMakeLists.txt:
     12        * DerivedSources.make:
     13        Add new paths and files.
     14
     15        * Modules/webdriver/NavigatorWebDriver.cpp: Added.
     16        (WebCore::NavigatorWebDriver::NavigatorWebDriver):
     17        (WebCore::NavigatorWebDriver::~NavigatorWebDriver):
     18        (WebCore::NavigatorWebDriver::supplementName):
     19        (WebCore::NavigatorWebDriver::isControlledByAutomation):
     20        (WebCore::NavigatorWebDriver::from):
     21        (WebCore::JSNavigator::webdriver):
     22        * Modules/webdriver/NavigatorWebDriver.h: Added.
     23        * Modules/webdriver/NavigatorWebDriver.idl: Added.
     24        * WebCore.xcodeproj/project.pbxproj:
     25
    1262016-12-01  Brady Eidson  <beidson@apple.com>
    227
  • trunk/Source/WebCore/DerivedSources.make

    r209184 r209198  
    4949    $(WebCore)/Modules/webaudio \
    5050    $(WebCore)/Modules/webdatabase \
     51    $(WebCore)/Modules/webdriver \
    5152    $(WebCore)/Modules/websockets \
    5253    $(WebCore)/animation \
     
    241242    $(WebCore)/Modules/webdatabase/SQLTransactionCallback.idl \
    242243    $(WebCore)/Modules/webdatabase/SQLTransactionErrorCallback.idl \
     244    $(WebCore)/Modules/webdriver/NavigatorWebDriver.idl \
    243245    $(WebCore)/Modules/websockets/CloseEvent.idl \
    244246    $(WebCore)/Modules/websockets/WebSocket.idl \
  • trunk/Source/WebCore/Modules/webdriver/NavigatorWebDriver.cpp

    r209197 r209198  
    2525
    2626#include "config.h"
     27#include "NavigatorWebDriver.h"
    2728
    28 #if USE(APPLE_INTERNAL_SDK)
    29 #include <WebKitAdditions/WebCoreAdditions.cpp>
    30 #endif
     29#include "Frame.h"
     30#include "JSNavigator.h"
     31#include "Navigator.h"
     32#include "Page.h"
    3133
     34using namespace JSC;
     35
     36namespace WebCore {
     37
     38NavigatorWebDriver::NavigatorWebDriver(Frame* frame)
     39    : m_frame(frame)
     40{
     41}
     42
     43NavigatorWebDriver::~NavigatorWebDriver()
     44{
     45}
     46
     47const char* NavigatorWebDriver::supplementName()
     48{
     49    return "NavigatorWebDriver";
     50}
     51
     52bool NavigatorWebDriver::isControlledByAutomation() const
     53{
     54    if (!m_frame || !m_frame->page())
     55        return false;
     56
     57    return m_frame->page()->isControlledByAutomation();
     58}
     59
     60NavigatorWebDriver* NavigatorWebDriver::from(Navigator* navigator)
     61{
     62    NavigatorWebDriver* supplement = static_cast<NavigatorWebDriver*>(Supplement<Navigator>::from(navigator, supplementName()));
     63    if (!supplement) {
     64        auto newSupplement = std::make_unique<NavigatorWebDriver>(navigator->frame());
     65        supplement = newSupplement.get();
     66        provideTo(navigator, supplementName(), WTFMove(newSupplement));
     67    }
     68    return supplement;
     69}
     70
     71JSValue JSNavigator::webdriver(ExecState&) const
     72{
     73    bool isControlledByAutomation = NavigatorWebDriver::from(&wrapped())->isControlledByAutomation();
     74    return isControlledByAutomation ? jsBoolean(true) : jsUndefined();
     75}
     76
     77} // namespace WebCore
  • trunk/Source/WebCore/Modules/webdriver/NavigatorWebDriver.h

    r209197 r209198  
    2424 */
    2525
    26 #include "config.h"
     26#pragma once
    2727
    28 #if USE(APPLE_INTERNAL_SDK)
    29 #include <WebKitAdditions/WebCoreAdditions.cpp>
    30 #endif
     28#include "Supplementable.h"
    3129
     30namespace WebCore {
     31
     32class Frame;
     33class Navigator;
     34
     35class NavigatorWebDriver final : public Supplement<Navigator> {
     36public:
     37    explicit NavigatorWebDriver(Frame*);
     38    virtual ~NavigatorWebDriver();
     39
     40    bool isControlledByAutomation() const;
     41
     42    static NavigatorWebDriver* from(Navigator*);
     43    static bool isControlledByAutomation(Navigator& navigator);
     44private:
     45    static const char* supplementName();
     46
     47    Frame* m_frame { nullptr };
     48};
     49
     50} // namespace WebCore
  • trunk/Source/WebCore/Modules/webdriver/NavigatorWebDriver.idl

    r209197 r209198  
    2424 */
    2525
    26 #include "config.h"
    27 
    28 #if USE(APPLE_INTERNAL_SDK)
    29 #include <WebKitAdditions/WebCoreAdditions.cpp>
    30 #endif
    31 
     26partial interface Navigator {
     27    [NotEnumerable, Custom] readonly attribute boolean webdriver;
     28};
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r209184 r209198  
    801801                1A762C790A074F2600989F5B /* JSXPathResult.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A762C710A074F2600989F5B /* JSXPathResult.cpp */; };
    802802                1A762C7A0A074F2600989F5B /* JSXPathResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A762C720A074F2600989F5B /* JSXPathResult.h */; settings = {ATTRIBUTES = (Private, ); }; };
    803                 1A7E19461C5863BE00CCDDF3 /* WebKitAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A7E19441C5863BE00CCDDF3 /* WebKitAdditions.mm */; };
    804803                1A7E3C291710997300367935 /* ThreadableLoaderClientWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A7E3C281710997300367935 /* ThreadableLoaderClientWrapper.h */; };
    805804                1A7FA6190DDA3B3A0028F8A5 /* NetworkStateNotifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A7FA6180DDA3B3A0028F8A5 /* NetworkStateNotifier.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    37753774                9920398218B95BC600B39AF9 /* UserInputBridge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9920398018B95BC600B39AF9 /* UserInputBridge.cpp */; };
    37763775                9920398318B95BC600B39AF9 /* UserInputBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 9920398118B95BC600B39AF9 /* UserInputBridge.h */; settings = {ATTRIBUTES = (Private, ); }; };
     3776                996E59DE1DF01285006612B9 /* NavigatorWebDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 996E59DB1DF00D90006612B9 /* NavigatorWebDriver.cpp */; };
     3777                996E59DF1DF0128D006612B9 /* NavigatorWebDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 996E59DC1DF00D90006612B9 /* NavigatorWebDriver.h */; };
    37773778                99C7CCB318C663E40032E413 /* MemoizedDOMResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 99C7CCB218C663E40032E413 /* MemoizedDOMResult.h */; };
    37783779                99C7CCB518C6B8990032E413 /* MemoizedDOMResult.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 99C7CCB418C6B8990032E413 /* MemoizedDOMResult.cpp */; };
     
    78397840                1A762C710A074F2600989F5B /* JSXPathResult.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSXPathResult.cpp; sourceTree = "<group>"; };
    78407841                1A762C720A074F2600989F5B /* JSXPathResult.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSXPathResult.h; sourceTree = "<group>"; };
    7841                 1A7E19441C5863BE00CCDDF3 /* WebKitAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebKitAdditions.mm; sourceTree = "<group>"; };
    78427842                1A7E3C281710997300367935 /* ThreadableLoaderClientWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThreadableLoaderClientWrapper.h; sourceTree = "<group>"; };
    78437843                1A7FA6180DDA3B3A0028F8A5 /* NetworkStateNotifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkStateNotifier.h; sourceTree = "<group>"; };
     
    1140911409                9920398018B95BC600B39AF9 /* UserInputBridge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserInputBridge.cpp; sourceTree = "<group>"; };
    1141011410                9920398118B95BC600B39AF9 /* UserInputBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserInputBridge.h; sourceTree = "<group>"; };
     11411                996E59DB1DF00D90006612B9 /* NavigatorWebDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NavigatorWebDriver.cpp; sourceTree = "<group>"; };
     11412                996E59DC1DF00D90006612B9 /* NavigatorWebDriver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavigatorWebDriver.h; sourceTree = "<group>"; };
     11413                996E59DD1DF00D90006612B9 /* NavigatorWebDriver.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NavigatorWebDriver.idl; sourceTree = "<group>"; };
    1141111414                99C7CCB218C663E40032E413 /* MemoizedDOMResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoizedDOMResult.h; sourceTree = "<group>"; };
    1141211415                99C7CCB418C6B8990032E413 /* MemoizedDOMResult.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoizedDOMResult.cpp; sourceTree = "<group>"; };
     
    1912619129                                FD315FA212B025B100C1A359 /* webaudio */,
    1912719130                                97BC69D51505F054001B74AC /* webdatabase */,
     19131                                996E59DA1DF00D45006612B9 /* webdriver */,
    1912819132                                97AABCF714FA09B5007457AE /* websockets */,
    1912919133                        );
     
    1944219446                        sourceTree = "<group>";
    1944319447                };
     19448                996E59DA1DF00D45006612B9 /* webdriver */ = {
     19449                        isa = PBXGroup;
     19450                        children = (
     19451                                996E59DB1DF00D90006612B9 /* NavigatorWebDriver.cpp */,
     19452                                996E59DC1DF00D90006612B9 /* NavigatorWebDriver.h */,
     19453                                996E59DD1DF00D90006612B9 /* NavigatorWebDriver.idl */,
     19454                        );
     19455                        path = webdriver;
     19456                        sourceTree = "<group>";
     19457                };
    1944419458                99E45A1318A021760026D88F /* replay */ = {
    1944519459                        isa = PBXGroup;
     
    1965019664                                CDC979F31C498C0900DB50D4 /* WebCoreNSErrorExtras.h */,
    1965119665                                CDC979F21C498C0900DB50D4 /* WebCoreNSErrorExtras.mm */,
    19652                                 1A7E19441C5863BE00CCDDF3 /* WebKitAdditions.mm */,
    1965319666                                5DFEBAB618592B6D00C75BEB /* WebKitAvailability.h */,
    1965419667                                CDA29A081CBD99F400901CCF /* WebPlaybackSessionInterface.h */,
     
    2523225245                                E11003311C9AC3DE00412DD0 /* CSSGridAutoRepeatValue.h in Headers */,
    2523325246                                CD7DBB2918CA19C600C11066 /* CSSGridLineNamesValue.h in Headers */,
     25247                                996E59DF1DF0128D006612B9 /* NavigatorWebDriver.h in Headers */,
    2523425248                                CD3E252418046BCD00E27F56 /* CSSGridTemplateAreasValue.h in Headers */,
    2523525249                                FB3056C2169E5DAC0096A232 /* CSSGroupingRule.h in Headers */,
     
    2964429658                                A77979190D6B9D0C003851B9 /* ImageData.cpp in Sources */,
    2964529659                                555B87EC1CAAF0AB00349425 /* ImageDecoderCG.cpp in Sources */,
     29660                                996E59DE1DF01285006612B9 /* NavigatorWebDriver.cpp in Sources */,
    2964629661                                97205AB51239291000B17380 /* ImageDocument.cpp in Sources */,
    2964729662                                5576A5641D88A70800CCC04C /* ImageFrame.cpp in Sources */,
     
    3173531750                                A5840E24187B8AC200843B10 /* WebInjectedScriptHost.cpp in Sources */,
    3173631751                                A584FE2F1864CB8400843B10 /* WebInjectedScriptManager.cpp in Sources */,
    31737                                 1A7E19461C5863BE00CCDDF3 /* WebKitAdditions.mm in Sources */,
    3173831752                                31C0FF210E4CEB6E007D6FE5 /* WebKitAnimationEvent.cpp in Sources */,
    3173931753                                976D6C7B122B8A3D001FD1F7 /* BlobBuilder.cpp in Sources */,
Note: See TracChangeset for help on using the changeset viewer.