12bde8e466a4451c7319e3a072d118917957d6554Steve Block/*
22bde8e466a4451c7319e3a072d118917957d6554Steve Block * Copyright (C) 2011 Apple Inc. All rights reserved.
32bde8e466a4451c7319e3a072d118917957d6554Steve Block *
42bde8e466a4451c7319e3a072d118917957d6554Steve Block * Redistribution and use in source and binary forms, with or without
52bde8e466a4451c7319e3a072d118917957d6554Steve Block * modification, are permitted provided that the following conditions
62bde8e466a4451c7319e3a072d118917957d6554Steve Block * are met:
72bde8e466a4451c7319e3a072d118917957d6554Steve Block * 1. Redistributions of source code must retain the above copyright
82bde8e466a4451c7319e3a072d118917957d6554Steve Block *    notice, this list of conditions and the following disclaimer.
92bde8e466a4451c7319e3a072d118917957d6554Steve Block * 2. Redistributions in binary form must reproduce the above copyright
102bde8e466a4451c7319e3a072d118917957d6554Steve Block *    notice, this list of conditions and the following disclaimer in the
112bde8e466a4451c7319e3a072d118917957d6554Steve Block *    documentation and/or other materials provided with the distribution.
122bde8e466a4451c7319e3a072d118917957d6554Steve Block *
132bde8e466a4451c7319e3a072d118917957d6554Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
142bde8e466a4451c7319e3a072d118917957d6554Steve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
152bde8e466a4451c7319e3a072d118917957d6554Steve Block * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
162bde8e466a4451c7319e3a072d118917957d6554Steve Block * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
172bde8e466a4451c7319e3a072d118917957d6554Steve Block * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
182bde8e466a4451c7319e3a072d118917957d6554Steve Block * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
192bde8e466a4451c7319e3a072d118917957d6554Steve Block * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
202bde8e466a4451c7319e3a072d118917957d6554Steve Block * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
212bde8e466a4451c7319e3a072d118917957d6554Steve Block * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
222bde8e466a4451c7319e3a072d118917957d6554Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
232bde8e466a4451c7319e3a072d118917957d6554Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
242bde8e466a4451c7319e3a072d118917957d6554Steve Block */
252bde8e466a4451c7319e3a072d118917957d6554Steve Block
262bde8e466a4451c7319e3a072d118917957d6554Steve Block#import "config.h"
272bde8e466a4451c7319e3a072d118917957d6554Steve Block#import "StorageTrackerDelegate.h"
282bde8e466a4451c7319e3a072d118917957d6554Steve Block
292bde8e466a4451c7319e3a072d118917957d6554Steve Block#import "LayoutTestController.h"
302bde8e466a4451c7319e3a072d118917957d6554Steve Block#import <WebKit/WebSecurityOriginPrivate.h>
312bde8e466a4451c7319e3a072d118917957d6554Steve Block#import <WebKit/WebStorageManagerPrivate.h>
322bde8e466a4451c7319e3a072d118917957d6554Steve Block
332bde8e466a4451c7319e3a072d118917957d6554Steve Block@implementation StorageTrackerDelegate
342bde8e466a4451c7319e3a072d118917957d6554Steve Block
352bde8e466a4451c7319e3a072d118917957d6554Steve Block- (id)init
362bde8e466a4451c7319e3a072d118917957d6554Steve Block{
372bde8e466a4451c7319e3a072d118917957d6554Steve Block    self = [super init];
382bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (!self)
392bde8e466a4451c7319e3a072d118917957d6554Steve Block        return nil;
402bde8e466a4451c7319e3a072d118917957d6554Steve Block
412bde8e466a4451c7319e3a072d118917957d6554Steve Block    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(originModified:) name:WebStorageDidModifyOriginNotification object:nil];
422bde8e466a4451c7319e3a072d118917957d6554Steve Block
432bde8e466a4451c7319e3a072d118917957d6554Steve Block    return self;
442bde8e466a4451c7319e3a072d118917957d6554Steve Block}
452bde8e466a4451c7319e3a072d118917957d6554Steve Block
462bde8e466a4451c7319e3a072d118917957d6554Steve Block- (void)logNotifications:(unsigned)number controller:(LayoutTestController*)controller
472bde8e466a4451c7319e3a072d118917957d6554Steve Block{
482bde8e466a4451c7319e3a072d118917957d6554Steve Block    controllerToNotifyDone = controller;
492bde8e466a4451c7319e3a072d118917957d6554Steve Block
502bde8e466a4451c7319e3a072d118917957d6554Steve Block    numberOfNotificationsToLog = number;
512bde8e466a4451c7319e3a072d118917957d6554Steve Block}
522bde8e466a4451c7319e3a072d118917957d6554Steve Block
532bde8e466a4451c7319e3a072d118917957d6554Steve Block- (void)originModified:(NSNotification *)notification
542bde8e466a4451c7319e3a072d118917957d6554Steve Block{
552bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (!numberOfNotificationsToLog)
562bde8e466a4451c7319e3a072d118917957d6554Steve Block        return;
572bde8e466a4451c7319e3a072d118917957d6554Steve Block
582bde8e466a4451c7319e3a072d118917957d6554Steve Block    numberOfNotificationsToLog--;
592bde8e466a4451c7319e3a072d118917957d6554Steve Block
602bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (numberOfNotificationsToLog == 0 && controllerToNotifyDone) {
612bde8e466a4451c7319e3a072d118917957d6554Steve Block        NSArray *origins = [[WebStorageManager sharedWebStorageManager] origins];
622bde8e466a4451c7319e3a072d118917957d6554Steve Block        for (WebSecurityOrigin *origin in origins)
632bde8e466a4451c7319e3a072d118917957d6554Steve Block            printf("Origin identifier: '%s'\n", [[origin databaseIdentifier] UTF8String]);
642bde8e466a4451c7319e3a072d118917957d6554Steve Block
652bde8e466a4451c7319e3a072d118917957d6554Steve Block        controllerToNotifyDone->notifyDone();
662bde8e466a4451c7319e3a072d118917957d6554Steve Block    }
672bde8e466a4451c7319e3a072d118917957d6554Steve Block}
682bde8e466a4451c7319e3a072d118917957d6554Steve Block
692bde8e466a4451c7319e3a072d118917957d6554Steve Block- (void)dealloc
702bde8e466a4451c7319e3a072d118917957d6554Steve Block{
712bde8e466a4451c7319e3a072d118917957d6554Steve Block    [[NSNotificationCenter defaultCenter] removeObserver:self name:WebStorageDidModifyOriginNotification object:nil];
722bde8e466a4451c7319e3a072d118917957d6554Steve Block
732bde8e466a4451c7319e3a072d118917957d6554Steve Block    [super dealloc];
742bde8e466a4451c7319e3a072d118917957d6554Steve Block}
752bde8e466a4451c7319e3a072d118917957d6554Steve Block
762bde8e466a4451c7319e3a072d118917957d6554Steve Block- (void)setControllerToNotifyDone:(LayoutTestController*)controller
772bde8e466a4451c7319e3a072d118917957d6554Steve Block{
782bde8e466a4451c7319e3a072d118917957d6554Steve Block    controllerToNotifyDone = controller;
792bde8e466a4451c7319e3a072d118917957d6554Steve Block}
802bde8e466a4451c7319e3a072d118917957d6554Steve Block
812bde8e466a4451c7319e3a072d118917957d6554Steve Block
822bde8e466a4451c7319e3a072d118917957d6554Steve Block@end
83