Changeset 163212 in webkit


Ignore:
Timestamp:
Jan 31, 2014 3:28:44 PM (10 years ago)
Author:
ap@apple.com
Message:

Expose creation and modification times for LocalStorage
https://bugs.webkit.org/show_bug.cgi?id=128018

Reviewed by Anders Carlsson.

Source/WebCore:

  • WebCore.exp.in: Export FileSystem functions to get file times.

Source/WebKit2:

  • UIProcess/API/C/WKKeyValueStorageManager.cpp:

(WKKeyValueStorageManagerGetOriginKey):
(WKKeyValueStorageManagerGetCreationTimeKey):
(WKKeyValueStorageManagerGetModificationTimeKey):
(WKKeyValueStorageManagerGetStorageDetailsByOrigin):

  • UIProcess/API/C/WKKeyValueStorageManager.h:
  • UIProcess/Storage/LocalStorageDatabaseTracker.cpp:

(WebKit::LocalStorageDatabaseTracker::origins):
(WebKit::LocalStorageDatabaseTracker::details):

  • UIProcess/Storage/LocalStorageDatabaseTracker.h:
  • UIProcess/Storage/StorageManager.cpp:

(WebKit::StorageManager::getStorageDetailsByOrigin):
(WebKit::StorageManager::getStorageDetailsByOriginInternal):

  • UIProcess/Storage/StorageManager.h:
  • UIProcess/WebKeyValueStorageManager.cpp:

(WebKit::WebKeyValueStorageManager::originKey):
(WebKit::WebKeyValueStorageManager::creationTimeKey):
(WebKit::WebKeyValueStorageManager::modificationTimeKey):
(WebKit::didGetKeyValueStorageOrigins):
(WebKit::didGetStorageDetailsByOrigin):
(WebKit::WebKeyValueStorageManager::getStorageDetailsByOrigin):

  • UIProcess/WebKeyValueStorageManager.h:
  • WebKit2.xcodeproj/project.pbxproj:
Location:
trunk/Source
Files:
12 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r163208 r163212  
     12014-01-31  Alexey Proskuryakov  <ap@apple.com>
     2
     3        Expose creation and modification times for LocalStorage
     4        https://bugs.webkit.org/show_bug.cgi?id=128018
     5
     6        Reviewed by Anders Carlsson.
     7
     8        * WebCore.exp.in: Export FileSystem functions to get file times.
     9
    1102014-01-30  Maciej Stachowiak  <mjs@apple.com>
    211
  • trunk/Source/WebCore/WebCore.exp.in

    r163180 r163212  
    777777__ZN7WebCore19TextResourceDecoderC1ERKN3WTF6StringERKNS_12TextEncodingEb
    778778__ZN7WebCore19TextResourceDecoderD1Ev
     779__ZN7WebCore19getFileCreationTimeERKN3WTF6StringERl
    779780__ZN7WebCore19toInt32EnforceRangeEPN3JSC9ExecStateENS0_7JSValueE
    780781__ZN7WebCore20CachedResourceLoader31garbageCollectDocumentResourcesEv
     
    892893__ZN7WebCore23eventTimeStampSince1970EP7NSEvent
    893894#endif
     895__ZN7WebCore23getFileModificationTimeERKN3WTF6StringERl
    894896__ZN7WebCore23getHostnamesWithCookiesERKNS_21NetworkStorageSessionERN3WTF7HashSetINS3_6StringENS3_10StringHashENS3_10HashTraitsIS5_EEEE
    895897__ZN7WebCore24CachedResourceHandleBase11setResourceEPNS_14CachedResourceE
  • trunk/Source/WebKit2/ChangeLog

    r163201 r163212  
     12014-01-31  Alexey Proskuryakov  <ap@apple.com>
     2
     3        Expose creation and modification times for LocalStorage
     4        https://bugs.webkit.org/show_bug.cgi?id=128018
     5
     6        Reviewed by Anders Carlsson.
     7
     8        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
     9        (WKKeyValueStorageManagerGetOriginKey):
     10        (WKKeyValueStorageManagerGetCreationTimeKey):
     11        (WKKeyValueStorageManagerGetModificationTimeKey):
     12        (WKKeyValueStorageManagerGetStorageDetailsByOrigin):
     13        * UIProcess/API/C/WKKeyValueStorageManager.h:
     14        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
     15        (WebKit::LocalStorageDatabaseTracker::origins):
     16        (WebKit::LocalStorageDatabaseTracker::details):
     17        * UIProcess/Storage/LocalStorageDatabaseTracker.h:
     18        * UIProcess/Storage/StorageManager.cpp:
     19        (WebKit::StorageManager::getStorageDetailsByOrigin):
     20        (WebKit::StorageManager::getStorageDetailsByOriginInternal):
     21        * UIProcess/Storage/StorageManager.h:
     22        * UIProcess/WebKeyValueStorageManager.cpp:
     23        (WebKit::WebKeyValueStorageManager::originKey):
     24        (WebKit::WebKeyValueStorageManager::creationTimeKey):
     25        (WebKit::WebKeyValueStorageManager::modificationTimeKey):
     26        (WebKit::didGetKeyValueStorageOrigins):
     27        (WebKit::didGetStorageDetailsByOrigin):
     28        (WebKit::WebKeyValueStorageManager::getStorageDetailsByOrigin):
     29        * UIProcess/WebKeyValueStorageManager.h:
     30        * WebKit2.xcodeproj/project.pbxproj:
     31
    1322014-01-31  Anders Carlsson  <andersca@apple.com>
    233
  • trunk/Source/WebKit2/UIProcess/API/C/WKKeyValueStorageManager.cpp

    r150306 r163212  
    3737}
    3838
     39WKStringRef WKKeyValueStorageManagerGetOriginKey()
     40{
     41    static API::String* key = API::String::create(WebKeyValueStorageManager::originKey()).leakRef();
     42    return toAPI(key);
     43}
     44
     45WKStringRef WKKeyValueStorageManagerGetCreationTimeKey()
     46{
     47    static API::String* key = API::String::create(WebKeyValueStorageManager::creationTimeKey()).leakRef();
     48    return toAPI(key);
     49}
     50
     51WKStringRef WKKeyValueStorageManagerGetModificationTimeKey()
     52{
     53    static API::String* key = API::String::create(WebKeyValueStorageManager::modificationTimeKey()).leakRef();
     54    return toAPI(key);
     55}
     56
    3957void WKKeyValueStorageManagerGetKeyValueStorageOrigins(WKKeyValueStorageManagerRef keyValueStorageManagerRef, void* context, WKKeyValueStorageManagerGetKeyValueStorageOriginsFunction callback)
    4058{
    4159    toImpl(keyValueStorageManagerRef)->getKeyValueStorageOrigins(ArrayCallback::create(context, callback));
     60}
     61
     62void WKKeyValueStorageManagerGetStorageDetailsByOrigin(WKKeyValueStorageManagerRef keyValueStorageManagerRef, void* context, WKKeyValueStorageManagerGetStorageDetailsByOriginFunction callback)
     63{
     64    toImpl(keyValueStorageManagerRef)->getStorageDetailsByOrigin(ArrayCallback::create(context, callback));
    4265}
    4366
  • trunk/Source/WebKit2/UIProcess/API/C/WKKeyValueStorageManager.h

    r95901 r163212  
    3535WK_EXPORT WKTypeID WKKeyValueStorageManagerGetTypeID();
    3636
     37/* Value type: WKSecurityOriginRef */
     38WK_EXPORT WKStringRef WKKeyValueStorageManagerGetOriginKey();
     39
     40/* Value type: WKDoubleRef, seconds since January 1st, 1970 UTC */
     41WK_EXPORT WKStringRef WKKeyValueStorageManagerGetCreationTimeKey();
     42
     43/* Value type: WKDoubleRef, seconds since January 1st, 1970 UTC */
     44WK_EXPORT WKStringRef WKKeyValueStorageManagerGetModificationTimeKey();
     45
    3746typedef void (*WKKeyValueStorageManagerGetKeyValueStorageOriginsFunction)(WKArrayRef, WKErrorRef, void*);
    3847WK_EXPORT void WKKeyValueStorageManagerGetKeyValueStorageOrigins(WKKeyValueStorageManagerRef keyValueStorageManager, void* context, WKKeyValueStorageManagerGetKeyValueStorageOriginsFunction function);
     48
     49typedef void (*WKKeyValueStorageManagerGetStorageDetailsByOriginFunction)(WKArrayRef, WKErrorRef, void*);
     50WK_EXPORT void WKKeyValueStorageManagerGetStorageDetailsByOrigin(WKKeyValueStorageManagerRef keyValueStorageManager, void* context, WKKeyValueStorageManagerGetStorageDetailsByOriginFunction function);
    3951
    4052WK_EXPORT void WKKeyValueStorageManagerDeleteEntriesForOrigin(WKKeyValueStorageManagerRef keyValueStorageManager, WKSecurityOriginRef origin);
  • trunk/Source/WebKit2/UIProcess/LocalStorageDetails.h

    r163210 r163212  
    11/*
    2  * Copyright (C) 2011 Apple Inc. All rights reserved.
     2 * Copyright (C) 2014 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2424 */
    2525
    26 #ifndef WKKeyValueStorageManager_h
    27 #define WKKeyValueStorageManager_h
     26#ifndef LocalStorageDetails_h
     27#define LocalStorageDetails_h
    2828
    29 #include <WebKit2/WKBase.h>
     29#include <wtf/text/WTFString.h>
    3030
    31 #ifdef __cplusplus
    32 extern "C" {
    33 #endif
     31namespace WebKit {
    3432
    35 WK_EXPORT WKTypeID WKKeyValueStorageManagerGetTypeID();
     33struct LocalStorageDetails {
     34    String originIdentifier;
     35    double creationTime;
     36    double modificationTime;
     37};
    3638
    37 typedef void (*WKKeyValueStorageManagerGetKeyValueStorageOriginsFunction)(WKArrayRef, WKErrorRef, void*);
    38 WK_EXPORT void WKKeyValueStorageManagerGetKeyValueStorageOrigins(WKKeyValueStorageManagerRef keyValueStorageManager, void* context, WKKeyValueStorageManagerGetKeyValueStorageOriginsFunction function);
     39} // namespace WebKit
    3940
    40 WK_EXPORT void WKKeyValueStorageManagerDeleteEntriesForOrigin(WKKeyValueStorageManagerRef keyValueStorageManager, WKSecurityOriginRef origin);
    41 WK_EXPORT void WKKeyValueStorageManagerDeleteAllEntries(WKKeyValueStorageManagerRef keyValueStorageManager);
    42 
    43 #ifdef __cplusplus
    44 }
    45 #endif
    46 
    47 #endif // WKKeyValueStorageManager_h
     41#endif // LocalStorageDetails_h
  • trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp

    r158245 r163212  
    2727#include "LocalStorageDatabaseTracker.h"
    2828
     29#include "LocalStorageDetails.h"
    2930#include "WorkQueue.h"
    3031#include <WebCore/FileSystem.h>
     
    129130    origins.reserveInitialCapacity(m_origins.size());
    130131
    131     for (HashSet<String>::const_iterator it = m_origins.begin(), end = m_origins.end(); it != end; ++it)
    132         origins.uncheckedAppend(SecurityOrigin::createFromDatabaseIdentifier(*it));
     132    for (const String& origin : m_origins)
     133        origins.uncheckedAppend(SecurityOrigin::createFromDatabaseIdentifier(origin));
    133134
    134135    return origins;
     136}
     137
     138Vector<LocalStorageDetails> LocalStorageDatabaseTracker::details()
     139{
     140    Vector<LocalStorageDetails> result;
     141    result.reserveInitialCapacity(m_origins.size());
     142
     143    for (const String& origin : m_origins) {
     144        String filePath = pathForDatabaseWithOriginIdentifier(origin);
     145        time_t time;
     146
     147        LocalStorageDetails details;
     148        details.originIdentifier = origin.isolatedCopy();
     149        details.creationTime = getFileCreationTime(filePath, time) ? time : 0;
     150        details.modificationTime = getFileModificationTime(filePath, time) ? time : 0;
     151        result.uncheckedAppend(details);
     152    }
     153
     154    return result;
    135155}
    136156
  • trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.h

    r153499 r163212  
    4343namespace WebKit {
    4444
     45struct LocalStorageDetails;
     46
    4547class LocalStorageDatabaseTracker : public ThreadSafeRefCounted<LocalStorageDatabaseTracker> {
    4648public:
     
    5658
    5759    Vector<RefPtr<WebCore::SecurityOrigin>> origins() const;
     60    Vector<LocalStorageDetails> details();
    5861
    5962private:
  • trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp

    r161148 r163212  
    2929#include "LocalStorageDatabase.h"
    3030#include "LocalStorageDatabaseTracker.h"
     31#include "LocalStorageDetails.h"
    3132#include "SecurityOriginData.h"
    3233#include "StorageAreaMapMessages.h"
     
    426427}
    427428
     429void StorageManager::getStorageDetailsByOrigin(FunctionDispatcher* callbackDispatcher, void* context, void (*callback)(const Vector<LocalStorageDetails>& storageDetails, void* context))
     430{
     431    m_queue->dispatch(bind(&StorageManager::getStorageDetailsByOriginInternal, this, RefPtr<FunctionDispatcher>(callbackDispatcher), context, callback));
     432}
     433
    428434void StorageManager::deleteEntriesForOrigin(SecurityOrigin* securityOrigin)
    429435{
     
    636642}
    637643
     644void StorageManager::getStorageDetailsByOriginInternal(FunctionDispatcher* dispatcher, void* context, void (*callbackFunction)(const Vector<LocalStorageDetails>& storageDetails, void* context))
     645{
     646    Vector<LocalStorageDetails> storageDetails = m_localStorageDatabaseTracker->details();
     647    dispatcher->dispatch(bind(callbackFunction, std::move(storageDetails), context));
     648}
     649
    638650void StorageManager::deleteEntriesForOriginInternal(SecurityOrigin* securityOrigin)
    639651{
  • trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h

    r162139 r163212  
    4141namespace WebKit {
    4242
     43struct LocalStorageDetails;
    4344struct SecurityOriginData;
    4445class LocalStorageDatabaseTracker;
     
    6263    // FIXME: Instead of a context + C function, this should take a WTF::Function, but we currently don't
    6364    // support arguments in functions.
    64     void getOrigins(FunctionDispatcher* callbackDispatcher, void* context, void (*callback)(const Vector<RefPtr<WebCore::SecurityOrigin>>& securityOrigins, void* context));
     65    void getOrigins(FunctionDispatcher* callbackDispatcher, void* context, void (*callback)(const Vector<RefPtr<WebCore::SecurityOrigin>>&, void* context));
     66    void getStorageDetailsByOrigin(FunctionDispatcher* callbackDispatcher, void* context, void (*callback)(const Vector<LocalStorageDetails>&, void* context));
    6567    void deleteEntriesForOrigin(WebCore::SecurityOrigin*);
    6668    void deleteAllEntries();
     
    9698    LocalStorageNamespace* getOrCreateLocalStorageNamespace(uint64_t storageNamespaceID);
    9799
    98     void getOriginsInternal(FunctionDispatcher* callbackDispatcher, void* context, void (*callback)(const Vector<RefPtr<WebCore::SecurityOrigin>>& securityOrigins, void* context));
     100    void getOriginsInternal(FunctionDispatcher* callbackDispatcher, void* context, void (*callback)(const Vector<RefPtr<WebCore::SecurityOrigin>>&, void* context));
     101    void getStorageDetailsByOriginInternal(FunctionDispatcher* callbackDispatcher, void* context, void (*callback)(const Vector<LocalStorageDetails>&, void* context));
    99102    void deleteEntriesForOriginInternal(WebCore::SecurityOrigin*);
    100103    void deleteAllEntriesInternal();
  • trunk/Source/WebKit2/UIProcess/WebKeyValueStorageManager.cpp

    r159234 r163212  
    2828
    2929#include "APIArray.h"
     30#include "LocalStorageDetails.h"
    3031#include "SecurityOriginData.h"
    3132#include "WebContext.h"
    3233#include "WebSecurityOrigin.h"
     34#include <wtf/NeverDestroyed.h>
    3335
    3436using namespace WebCore;
     
    3941{
    4042    return "WebKeyValueStorageManager";
     43}
     44
     45String WebKeyValueStorageManager::originKey()
     46{
     47    static NeverDestroyed<String> key(ASCIILiteral("WebKeyValueStorageManagerStorageDetailsOriginKey"));
     48    return key;
     49}
     50
     51String WebKeyValueStorageManager::creationTimeKey()
     52{
     53    static NeverDestroyed<String> key(ASCIILiteral("WebKeyValueStorageManagerStorageDetailsCreationTimeKey"));
     54    return key;
     55}
     56
     57String WebKeyValueStorageManager::modificationTimeKey()
     58{
     59    static NeverDestroyed<String> key(ASCIILiteral("WebKeyValueStorageManagerStorageDetailsModificationTimeKey"));
     60    return key;
    4161}
    4262
     
    6787}
    6888
    69 static void didGetKeyValueStorageOrigins(const Vector<RefPtr<WebCore::SecurityOrigin>>& securityOrigins, void* context)
     89static void didGetKeyValueStorageOrigins(const Vector<RefPtr<SecurityOrigin>>& securityOrigins, void* context)
    7090{
    7191    RefPtr<ArrayCallback> callback = adoptRef(static_cast<ArrayCallback*>(context));
     
    84104    context()->storageManager().getOrigins(RunLoop::main(), prpCallback.leakRef(), didGetKeyValueStorageOrigins);
    85105}
    86    
     106
     107static void didGetStorageDetailsByOrigin(const Vector<LocalStorageDetails>& storageDetails, void* context)
     108{
     109    RefPtr<ArrayCallback> callback = adoptRef(static_cast<ArrayCallback*>(context));
     110
     111    Vector<RefPtr<API::Object>> result;
     112    result.reserveInitialCapacity(storageDetails.size());
     113
     114    for (const LocalStorageDetails& originDetails : storageDetails) {
     115        HashMap<String, RefPtr<API::Object>> detailsMap;
     116
     117        RefPtr<API::Object> origin = WebSecurityOrigin::createFromDatabaseIdentifier(originDetails.originIdentifier);
     118
     119        detailsMap.set(WebKeyValueStorageManager::originKey(), origin);
     120        if (originDetails.creationTime)
     121            detailsMap.set(WebKeyValueStorageManager::creationTimeKey(), API::Double::create(originDetails.creationTime));
     122        if (originDetails.modificationTime)
     123            detailsMap.set(WebKeyValueStorageManager::modificationTimeKey(), API::Double::create(originDetails.modificationTime));
     124
     125        result.uncheckedAppend(ImmutableDictionary::create(std::move(detailsMap)));
     126    }
     127
     128    callback->performCallbackWithReturnValue(API::Array::create(std::move(result)).get());
     129}
     130
     131void WebKeyValueStorageManager::getStorageDetailsByOrigin(PassRefPtr<ArrayCallback> prpCallback)
     132{
     133    context()->storageManager().getStorageDetailsByOrigin(RunLoop::main(), prpCallback.leakRef(), didGetStorageDetailsByOrigin);
     134}
     135
    87136void WebKeyValueStorageManager::deleteEntriesForOrigin(WebSecurityOrigin* origin)
    88137{
  • trunk/Source/WebKit2/UIProcess/WebKeyValueStorageManager.h

    r162139 r163212  
    4747
    4848    void getKeyValueStorageOrigins(PassRefPtr<ArrayCallback>);
     49    void getStorageDetailsByOrigin(PassRefPtr<ArrayCallback>);
    4950    void deleteEntriesForOrigin(WebSecurityOrigin*);
    5051    void deleteAllEntries();
     
    5253    using API::Object::ref;
    5354    using API::Object::deref;
     55
     56    static String originKey();
     57    static String creationTimeKey();
     58    static String modificationTimeKey();
    5459
    5560private:
  • trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj

    r163113 r163212  
    13671367                E134F01712EA5D33004EC58D /* WKPrintingView.h in Headers */ = {isa = PBXBuildFile; fileRef = E134F01512EA5D11004EC58D /* WKPrintingView.h */; };
    13681368                E134F01A12EA5D99004EC58D /* WKPrintingView.mm in Sources */ = {isa = PBXBuildFile; fileRef = E134F01912EA5D99004EC58D /* WKPrintingView.mm */; };
     1369                E13833EC189C33C8001E2350 /* LocalStorageDetails.h in Headers */ = {isa = PBXBuildFile; fileRef = E13833EB189C33C8001E2350 /* LocalStorageDetails.h */; };
    13691370                E14A954916E016A40068DE82 /* NetworkProcessPlatformStrategies.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E14A954716E016A40068DE82 /* NetworkProcessPlatformStrategies.cpp */; };
    13701371                E14A954A16E016A40068DE82 /* NetworkProcessPlatformStrategies.h in Headers */ = {isa = PBXBuildFile; fileRef = E14A954816E016A40068DE82 /* NetworkProcessPlatformStrategies.h */; };
     
    31223123                E134F01512EA5D11004EC58D /* WKPrintingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKPrintingView.h; sourceTree = "<group>"; };
    31233124                E134F01912EA5D99004EC58D /* WKPrintingView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKPrintingView.mm; sourceTree = "<group>"; };
     3125                E13833EB189C33C8001E2350 /* LocalStorageDetails.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalStorageDetails.h; sourceTree = "<group>"; };
    31243126                E14A954716E016A40068DE82 /* NetworkProcessPlatformStrategies.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkProcessPlatformStrategies.cpp; path = NetworkProcess/NetworkProcessPlatformStrategies.cpp; sourceTree = "<group>"; };
    31253127                E14A954816E016A40068DE82 /* NetworkProcessPlatformStrategies.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkProcessPlatformStrategies.h; path = NetworkProcess/NetworkProcessPlatformStrategies.h; sourceTree = "<group>"; };
     
    49364938                                BC06F43812DBCCFB002D78DE /* GeolocationPermissionRequestProxy.h */,
    49374939                                BC6EDAA5111271C600E7678B /* PageClient.h */,
     4940                                E13833EB189C33C8001E2350 /* LocalStorageDetails.h */,
    49384941                                1AC75379183A9FDA0072CB15 /* PageLoadState.cpp */,
    49394942                                1AC7537A183A9FDB0072CB15 /* PageLoadState.h */,
     
    67466749                                37948409150C4B9700E52CE9 /* WKRenderLayer.h in Headers */,
    67476750                                37608823150414F700FC82C7 /* WKRenderObject.h in Headers */,
     6751                                E13833EC189C33C8001E2350 /* LocalStorageDetails.h in Headers */,
    67486752                                3336763B130C99DC006C9DE2 /* WKResourceCacheManager.h in Headers */,
    67496753                                BC8A501511765F5600757573 /* WKRetainPtr.h in Headers */,
Note: See TracChangeset for help on using the changeset viewer.