WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Revised Patch
0001-We-should-be-able-to-clear-search-field-recent-searc.patch (text/plain), 23.18 KB, created by
Zach Li
on 2015-10-13 16:24:02 PDT
(
hide
)
Description:
Revised Patch
Filename:
MIME Type:
Creator:
Zach Li
Created:
2015-10-13 16:24:02 PDT
Size:
23.18 KB
patch
obsolete
>From 2330fb670ea2b5bd2e08e59aa4bb87da94fa55a8 Mon Sep 17 00:00:00 2001 >From: Zhuo Li <zachli@apple.com> >Date: Tue, 13 Oct 2015 15:41:46 -0700 >Subject: [PATCH] We should be able to clear search field recent searches based > on time given. > >--- > Source/WebCore/ChangeLog | 35 ++++++++ > Source/WebCore/WebCore.xcodeproj/project.pbxproj | 4 + > Source/WebCore/platform/SearchPopupMenu.cpp | 42 ++++++++++ > Source/WebCore/platform/SearchPopupMenu.h | 1 + > .../WebCore/platform/cocoa/SearchPopupMenuCocoa.h | 1 + > .../WebCore/platform/cocoa/SearchPopupMenuCocoa.mm | 97 +++++++++++++++++++--- > Source/WebKit2/ChangeLog | 22 +++++ > .../WebKit2/Shared/WebsiteData/WebsiteDataTypes.h | 5 +- > .../UIProcess/API/Cocoa/WKWebsiteDataRecord.mm | 3 + > .../API/Cocoa/WKWebsiteDataRecordInternal.h | 4 + > .../API/Cocoa/WKWebsiteDataRecordPrivate.h | 1 + > .../UIProcess/WebsiteData/WebsiteDataStore.cpp | 18 ++++ > .../UIProcess/WebsiteData/WebsiteDataStore.h | 1 + > 13 files changed, 220 insertions(+), 14 deletions(-) > create mode 100644 Source/WebCore/platform/SearchPopupMenu.cpp > >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 65cf3aa..a6dbe9c 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,38 @@ >+2015-10-11 Zhuo Li <zachli@apple.com> >+ >+ Add WebKit API to clear data type Search Field Recent Searches. >+ https://bugs.webkit.org/show_bug.cgi?id=150019. >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * WebCore.xcodeproj/project.pbxproj: Add SearchPopupMenu.cpp. >+ * platform/SearchPopupMenu.h: Declare -removeRecentSearches function. >+ * platform/SearchPopupMenu.cpp: We only perform removing recent searches action when the platform >+ is cocoa for now. >+ * platform/cocoa/SearchPopupMenuCocoa.h: Add a function to remove recent searches based on >+ time. >+ * platform/cocoa/SearchPopupMenuCocoa.mm: >+ (WebCore::returnUncorruptedRecentSearchesArray): Return nil if the recent searches array is >+ corrupted, otherwise return the array. >+ (WebCore::returnUncorruptedDateInRecentSearch): Return nil if the date in recent search is >+ corrupted, otherwise return the date. >+ (WebCore::returnUncorruptedRecentSearchesPlist): Return nil if the recent searches plist is >+ corrupted, otherwise return the recent searches plist. >+ (WebCore::cleanRecentSearchesPlist): Replace the existing recent searches plist if there is >+ any with a clean one. >+ (WebCore::loadRecentSearches): Use -returnUncorruptedRecentSearcheArray and -returnUncorruptedDateInRecentSearch. >+ (WebCore::removeSearchFieldRecentSearches): >+ When the time passed in is equivalent to [NSDate distantPast], clear all recent searches in >+ the Recent Searches plist. Otherwise, we only clear the recent searches that were created >+ after or at the time that is passed in as the parameter. If all recent searches associated >+ with an autosave name were created after or at the time that is passed in as the parameter, >+ remove this autosave name key and all of its values in the plist. If all recent searches >+ associated with every autosave name in the plist were created after or at the time that is >+ passed in as the parameter, clear all recent searches in the Recent Searches plist. >+ >+ Also, we clear all recent searches in the Recent Searches plist when we find the plist is >+ corrupted. >+ > 2015-10-08 Zhuo Li <zachli@apple.com> > > Augment <input type=search>âs recent search history with the time each entry was added, >diff --git a/Source/WebCore/WebCore.xcodeproj/project.pbxproj b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >index 5bac0cf..08fdf68 100644 >--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj >+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >@@ -465,6 +465,7 @@ > 0C3F1F5B10C8871200D72CE1 /* WebGLUniformLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C3F1F5810C8871200D72CE1 /* WebGLUniformLocation.h */; }; > 0C45342710CDBBFA00869157 /* JSWebGLUniformLocation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C45342510CDBBFA00869157 /* JSWebGLUniformLocation.cpp */; }; > 0C45342810CDBBFA00869157 /* JSWebGLUniformLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C45342610CDBBFA00869157 /* JSWebGLUniformLocation.h */; }; >+ 0E51D1A41BCDB81A00471D28 /* SearchPopupMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0E51D1A31BCDB81A00471D28 /* SearchPopupMenu.cpp */; }; > 0E7058EE1BC5BC190045A507 /* SearchPopupMenuCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0E7058ED1BC5BC190045A507 /* SearchPopupMenuCocoa.mm */; }; > 0E7058F41BC5CEDA0045A507 /* SearchPopupMenuCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E7058F31BC5CCD70045A507 /* SearchPopupMenuCocoa.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 0F03C0741884695E00A5F8CA /* SystemMemory.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F03C0731884695E00A5F8CA /* SystemMemory.h */; settings = {ATTRIBUTES = (Private, ); }; }; >@@ -7691,6 +7692,7 @@ > 0C3F1F5910C8871200D72CE1 /* WebGLUniformLocation.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebGLUniformLocation.idl; sourceTree = "<group>"; }; > 0C45342510CDBBFA00869157 /* JSWebGLUniformLocation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWebGLUniformLocation.cpp; sourceTree = "<group>"; }; > 0C45342610CDBBFA00869157 /* JSWebGLUniformLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWebGLUniformLocation.h; sourceTree = "<group>"; }; >+ 0E51D1A31BCDB81A00471D28 /* SearchPopupMenu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SearchPopupMenu.cpp; sourceTree = "<group>"; }; > 0E7058ED1BC5BC190045A507 /* SearchPopupMenuCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SearchPopupMenuCocoa.mm; sourceTree = "<group>"; }; > 0E7058F31BC5CCD70045A507 /* SearchPopupMenuCocoa.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SearchPopupMenuCocoa.h; sourceTree = "<group>"; }; > 0F03C0731884695E00A5F8CA /* SystemMemory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SystemMemory.h; sourceTree = "<group>"; }; >@@ -22384,6 +22386,7 @@ > BC2441C30E8B65D00055320F /* ScrollView.cpp */, > BC6D6E2509AF943500F59759 /* ScrollView.h */, > AB7170880B3118080017123E /* SearchPopupMenu.h */, >+ 0E51D1A31BCDB81A00471D28 /* SearchPopupMenu.cpp */, > 077AF13E18F4AE400001ED61 /* SerializedPlatformRepresentation.h */, > 1A4A954B0B4EDCCB002D8C3C /* SharedBuffer.cpp */, > 1A4A954C0B4EDCCB002D8C3C /* SharedBuffer.h */, >@@ -28321,6 +28324,7 @@ > FDC54F041399B0DA008D9117 /* BiquadFilterNode.cpp in Sources */, > FD31602612B0267600C1A359 /* BiquadProcessor.cpp in Sources */, > A89943290B42338800D7C802 /* BitmapImage.cpp in Sources */, >+ 0E51D1A41BCDB81A00471D28 /* SearchPopupMenu.cpp in Sources */, > 377A3A9015EFCE9B0059F5C7 /* BitmapImageCG.cpp in Sources */, > 976D6C78122B8A3D001FD1F7 /* Blob.cpp in Sources */, > 2EDEF1F3121B0EFC00726DB2 /* BlobData.cpp in Sources */, >diff --git a/Source/WebCore/platform/SearchPopupMenu.cpp b/Source/WebCore/platform/SearchPopupMenu.cpp >new file mode 100644 >index 0000000..ea26938 >--- /dev/null >+++ b/Source/WebCore/platform/SearchPopupMenu.cpp >@@ -0,0 +1,42 @@ >+/* >+ * Copyright (C) 2015 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' >+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS >+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS >+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN >+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) >+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF >+ * THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#include "config.h" >+#include "SearchPopupMenu.h" >+ >+#include "SearchPopupMenuCocoa.h" >+ >+namespace WebCore { >+ >+void SearchPopupMenu::removeRecentSearches(std::chrono::system_clock::time_point modifiedSince) >+{ >+#if PLATFORM(COCOA) >+ removeSearchFieldRecentSearches(modifiedSince); >+#else >+ UNUSED_PARAM(modifiedSince); >+#endif >+} >+ >+} >diff --git a/Source/WebCore/platform/SearchPopupMenu.h b/Source/WebCore/platform/SearchPopupMenu.h >index f809034..4740d0e 100644 >--- a/Source/WebCore/platform/SearchPopupMenu.h >+++ b/Source/WebCore/platform/SearchPopupMenu.h >@@ -42,6 +42,7 @@ public: > virtual void saveRecentSearches(const AtomicString& name, const Vector<RecentSearch>& searchItems) = 0; > virtual void loadRecentSearches(const AtomicString& name, Vector<RecentSearch>& searchItems) = 0; > virtual bool enabled() = 0; >+WEBCORE_EXPORT static void removeRecentSearches(std::chrono::system_clock::time_point modifiedSince); > }; > > } >diff --git a/Source/WebCore/platform/cocoa/SearchPopupMenuCocoa.h b/Source/WebCore/platform/cocoa/SearchPopupMenuCocoa.h >index 4e7c49e..06892b0 100644 >--- a/Source/WebCore/platform/cocoa/SearchPopupMenuCocoa.h >+++ b/Source/WebCore/platform/cocoa/SearchPopupMenuCocoa.h >@@ -32,6 +32,7 @@ namespace WebCore { > > WEBCORE_EXPORT void saveRecentSearches(const String& name, const Vector<RecentSearch>& searchItems); > WEBCORE_EXPORT Vector<RecentSearch> loadRecentSearches(const String& name); >+void removeSearchFieldRecentSearches(std::chrono::system_clock::time_point modifiedSince); > > } > >diff --git a/Source/WebCore/platform/cocoa/SearchPopupMenuCocoa.mm b/Source/WebCore/platform/cocoa/SearchPopupMenuCocoa.mm >index 12e87c7..716b37b 100644 >--- a/Source/WebCore/platform/cocoa/SearchPopupMenuCocoa.mm >+++ b/Source/WebCore/platform/cocoa/SearchPopupMenuCocoa.mm >@@ -66,6 +66,76 @@ static NSDate *toNSDateFromSystemClock(system_clock::time_point time) > return [NSDate dateWithTimeIntervalSince1970:duration_cast<duration<double>>(time.time_since_epoch()).count()]; > } > >+static NSMutableArray *returnUncorruptedRecentSearchesArray(NSDictionary *itemsDictionary, NSString *name) >+{ >+ NSDictionary *nameDictionary = [itemsDictionary objectForKey:name]; >+ if (![nameDictionary isKindOfClass:[NSDictionary class]]) >+ return nil; >+ >+ NSMutableArray *recentSearches = [nameDictionary objectForKey:searchesKey]; >+ if (![recentSearches isKindOfClass:[NSArray class]]) >+ return nil; >+ >+ return recentSearches; >+} >+ >+static NSDate *returnUncorruptedDateInRecentSearch(NSDictionary *recentSearch) >+{ >+ if (![recentSearch isKindOfClass:[NSDictionary class]]) >+ return nil; >+ >+ NSDate *date = [recentSearch objectForKey:dateKey]; >+ if (![date isKindOfClass:[NSDate class]]) >+ return nil; >+ >+ return date; >+} >+ >+static RetainPtr<NSDictionary> returnUncorruptedRecentSearchesPlist(NSDate *dateModified) >+{ >+ if ([dateModified isEqualToDate:[NSDate distantPast]]) >+ return nil; >+ >+ RetainPtr<NSMutableDictionary> recentSearchesPlist = readSearchFieldRecentSearchesPlist(); >+ NSMutableDictionary *itemsDictionary = [recentSearchesPlist objectForKey:itemsKey]; >+ if (![itemsDictionary isKindOfClass:[NSDictionary class]]) >+ return nil; >+ >+ RetainPtr<NSMutableArray> keysToRemove = adoptNS([[NSMutableArray alloc] init]); >+ for (NSString *key in itemsDictionary.allKeys) { >+ if (![key isKindOfClass:[NSString class]]) >+ return nil; >+ >+ NSMutableArray *recentSearches = returnUncorruptedRecentSearchesArray(itemsDictionary, key); >+ if (!recentSearches) >+ return nil; >+ >+ RetainPtr<NSMutableArray> entriesToRemove = adoptNS([[NSMutableArray alloc] init]); >+ for (NSDictionary *recentSearch in recentSearches) { >+ NSDate *date = returnUncorruptedDateInRecentSearch(recentSearch); >+ if (!date) >+ return nil; >+ >+ if ([date compare:dateModified] == NSOrderedDescending) >+ [entriesToRemove addObject:recentSearch]; >+ } >+ >+ [recentSearches removeObjectsInArray:entriesToRemove.get()]; >+ if (!recentSearches.count) >+ [keysToRemove addObject:key]; >+ } >+ >+ [itemsDictionary removeObjectsForKeys:keysToRemove.get()]; >+ return recentSearchesPlist; >+} >+ >+static void cleanRecentSearchesPlist() >+{ >+ RetainPtr<NSDictionary> emptyItemsDictionary = adoptNS([[NSDictionary alloc] init]); >+ RetainPtr<NSDictionary> emptyRecentSearchesDictionary = adoptNS([[NSDictionary alloc] initWithObjectsAndKeys:emptyItemsDictionary.get(), itemsKey, nil]); >+ [emptyRecentSearchesDictionary writeToFile:searchFieldRecentSearchesPlistPath() atomically:NO]; >+} >+ > void saveRecentSearches(const String& name, const Vector<RecentSearch>& searchItems) > { > if (name.isEmpty()) >@@ -108,30 +178,33 @@ Vector<RecentSearch> loadRecentSearches(const String& name) > if (![items isKindOfClass:[NSDictionary class]]) > return searchItems; > >- NSDictionary *nameItems = [items objectForKey:name]; >- if (![nameItems isKindOfClass:[NSDictionary class]]) >- return searchItems; >- >- NSArray *recentSearches = [nameItems objectForKey:searchesKey]; >- if (![recentSearches isKindOfClass:[NSArray class]]) >+ NSArray *recentSearches = returnUncorruptedRecentSearchesArray(items, name); >+ if (!recentSearches) > return searchItems; > > for (NSDictionary *item in recentSearches) { >- if (![item isKindOfClass:[NSDictionary class]]) >+ NSDate *date = returnUncorruptedDateInRecentSearch(item); >+ if (!date) > continue; >- >+ > NSString *searchString = [item objectForKey:searchStringKey]; > if (![searchString isKindOfClass:[NSString class]]) > continue; > >- NSDate *date = [item objectForKey:dateKey]; >- if (![date isKindOfClass:[NSDate class]]) >- continue; >- > searchItems.append({ String{ searchString }, toSystemClockTime(date) }); > } > > return searchItems; > } > >+void removeSearchFieldRecentSearches(std::chrono::system_clock::time_point modifiedSince) >+{ >+ NSDate *dateModified = toNSDateFromSystemClock(modifiedSince); >+ RetainPtr<NSDictionary> recentSearchesPlist = returnUncorruptedRecentSearchesPlist(dateModified); >+ if (recentSearchesPlist) >+ [recentSearchesPlist writeToFile:searchFieldRecentSearchesPlistPath() atomically:NO]; >+ else >+ cleanRecentSearchesPlist(); >+} >+ > } >diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog >index be31a5c..fbf0962 100644 >--- a/Source/WebKit2/ChangeLog >+++ b/Source/WebKit2/ChangeLog >@@ -1,3 +1,25 @@ >+2015-10-11 Zhuo Li <zachli@apple.com> >+ >+ Add WebKit API to clear data type Search Field Recent Searches. >+ https://bugs.webkit.org/show_bug.cgi?id=150019. >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * Shared/WebsiteData/WebsiteDataTypes.h: Add data type Search Field Recent Searches. >+ * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm: >+ (dataTypesToString): Ditto. >+ * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h: >+ (WebKit::toWebsiteDataTypes): Ditto. >+ (WebKit::toWKWebsiteDataTypes): Ditto. >+ * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h: Ditto. >+ * UIProcess/WebsiteData/WebsiteDataStore.cpp: >+ (WebKit::WebsiteDataStore::removeData): Handle the case when data type is Search >+ Field Recent Searches. >+ (WebKit::WebsiteDataStore::removeSearchFieldRecentSearches): Call the removing >+ recent searches logic in WebCore. >+ * UIProcess/WebsiteData/WebsiteDataStore.h: Add a private function for removing >+ recent searches based on time. >+ > 2015-10-08 Zhuo Li <zachli@apple.com> > > Augment <input type=search>âs recent search history with the time each entry was added, >diff --git a/Source/WebKit2/Shared/WebsiteData/WebsiteDataTypes.h b/Source/WebKit2/Shared/WebsiteData/WebsiteDataTypes.h >index fcab062..4a332c2 100644 >--- a/Source/WebKit2/Shared/WebsiteData/WebsiteDataTypes.h >+++ b/Source/WebKit2/Shared/WebsiteData/WebsiteDataTypes.h >@@ -39,11 +39,12 @@ enum WebsiteDataTypes { > WebsiteDataTypeIndexedDBDatabases = 1 << 7, > WebsiteDataTypeMediaKeys = 1 << 8, > WebsiteDataTypeHSTSCache = 1 << 9, >+ WebsiteDataTypeSearchFieldRecentSearches = 1 << 10, > #if ENABLE(NETSCAPE_PLUGIN_API) >- WebsiteDataTypePlugInData = 1 << 10, >+ WebsiteDataTypePlugInData = 1 << 11, > #endif > #if ENABLE(MEDIA_STREAM) >- WebsiteDataTypeMediaDeviceIdentifier = 1 << 11, >+ WebsiteDataTypeMediaDeviceIdentifier = 1 << 12, > #endif > }; > >diff --git a/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm b/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm >index 3eb8b71..6daf0bc 100644 >--- a/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm >+++ b/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm >@@ -41,6 +41,7 @@ NSString * const WKWebsiteDataTypeIndexedDBDatabases = @"WKWebsiteDataTypeIndexe > > NSString * const _WKWebsiteDataTypeMediaKeys = @"_WKWebsiteDataTypeMediaKeys"; > NSString * const _WKWebsiteDataTypeHSTSCache = @"_WKWebsiteDataTypeHSTSCache"; >+NSString * const _WKWebsiteDataTypeSearchFieldRecentSearches = @"_WKWebsiteDataTypeSearchFieldRecentSearches"; > > #if PLATFORM(MAC) > NSString * const _WKWebsiteDataTypePlugInData = @"_WKWebsiteDataTypePlugInData"; >@@ -79,6 +80,8 @@ static NSString *dataTypesToString(NSSet *dataTypes) > [array addObject:@"HSTS Cache"]; > if ([dataTypes containsObject:_WKWebsiteDataTypeMediaKeys]) > [array addObject:@"Media Keys"]; >+ if ([dataTypes containsObject:_WKWebsiteDataTypeSearchFieldRecentSearches]) >+ [array addObject:@"Search Field Recent Searches"]; > #if PLATFORM(MAC) > if ([dataTypes containsObject:_WKWebsiteDataTypePlugInData]) > [array addObject:@"Plug-in Data"]; >diff --git a/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h b/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h >index 2348634..abe8b57 100644 >--- a/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h >+++ b/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h >@@ -64,6 +64,8 @@ static inline WebKit::WebsiteDataTypes toWebsiteDataTypes(NSSet *wkWebsiteDataTy > websiteDataTypes |= WebsiteDataTypes::WebsiteDataTypeHSTSCache; > if ([wkWebsiteDataTypes containsObject:_WKWebsiteDataTypeMediaKeys]) > websiteDataTypes |= WebsiteDataTypes::WebsiteDataTypeMediaKeys; >+ if ([wkWebsiteDataTypes containsObject:_WKWebsiteDataTypeSearchFieldRecentSearches]) >+ websiteDataTypes |= WebsiteDataTypes::WebsiteDataTypeSearchFieldRecentSearches; > #if ENABLE(NETSCAPE_PLUGIN_API) > if ([wkWebsiteDataTypes containsObject:_WKWebsiteDataTypePlugInData]) > websiteDataTypes |= WebsiteDataTypes::WebsiteDataTypePlugInData; >@@ -97,6 +99,8 @@ static inline RetainPtr<NSSet> toWKWebsiteDataTypes(int websiteDataTypes) > [wkWebsiteDataTypes addObject:_WKWebsiteDataTypeHSTSCache]; > if (websiteDataTypes & WebsiteDataTypes::WebsiteDataTypeMediaKeys) > [wkWebsiteDataTypes addObject:_WKWebsiteDataTypeMediaKeys]; >+ if (websiteDataTypes & WebsiteDataTypes::WebsiteDataTypeSearchFieldRecentSearches) >+ [wkWebsiteDataTypes addObject:_WKWebsiteDataTypeSearchFieldRecentSearches]; > #if ENABLE(NETSCAPE_PLUGIN_API) > if (websiteDataTypes & WebsiteDataTypes::WebsiteDataTypePlugInData) > [wkWebsiteDataTypes addObject:_WKWebsiteDataTypePlugInData]; >diff --git a/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h b/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h >index cfc5bc2..847c54f 100644 >--- a/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h >+++ b/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h >@@ -29,6 +29,7 @@ > > WK_EXTERN NSString * const _WKWebsiteDataTypeHSTSCache WK_AVAILABLE(10_11, 9_0); > WK_EXTERN NSString * const _WKWebsiteDataTypeMediaKeys WK_AVAILABLE(10_11, 9_0); >+WK_EXTERN NSString * const _WKWebsiteDataTypeSearchFieldRecentSearches WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA); > > #if !TARGET_OS_IPHONE > WK_EXTERN NSString * const _WKWebsiteDataTypePlugInData WK_AVAILABLE(10_11, NA); >diff --git a/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp b/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp >index 92ed61e..4455854 100644 >--- a/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp >+++ b/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp >@@ -35,6 +35,7 @@ > #include <WebCore/ApplicationCacheStorage.h> > #include <WebCore/DatabaseTracker.h> > #include <WebCore/OriginLock.h> >+#include <WebCore/SearchPopupMenu.h> > #include <WebCore/SecurityOrigin.h> > #include <wtf/RunLoop.h> > >@@ -632,6 +633,18 @@ void WebsiteDataStore::removeData(WebsiteDataTypes dataTypes, std::chrono::syste > }); > } > >+ if (dataTypes & WebsiteDataTypeSearchFieldRecentSearches && isPersistent()) { >+ callbackAggregator->addPendingCallback(); >+ >+ m_queue->dispatch([modifiedSince, callbackAggregator] { >+ removeSearchFieldRecentSearches(modifiedSince); >+ >+ RunLoop::main().dispatch([callbackAggregator] { >+ callbackAggregator->removePendingCallback(); >+ }); >+ }); >+ } >+ > #if ENABLE(NETSCAPE_PLUGIN_API) > if (dataTypes & WebsiteDataTypePlugInData && isPersistent()) { > class State { >@@ -1067,4 +1080,9 @@ void WebsiteDataStore::removeMediaKeys(const String& mediaKeysStorageDirectory, > } > } > >+void WebsiteDataStore::removeSearchFieldRecentSearches(std::chrono::system_clock::time_point modifiedSince) >+{ >+ WebCore::SearchPopupMenu::removeRecentSearches(modifiedSince); >+} >+ > } >diff --git a/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h b/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h >index 36b60c7..4c4039c 100644 >--- a/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h >+++ b/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h >@@ -103,6 +103,7 @@ private: > static Vector<RefPtr<WebCore::SecurityOrigin>> mediaKeyOrigins(const String& mediaKeysStorageDirectory); > static void removeMediaKeys(const String& mediaKeysStorageDirectory, std::chrono::system_clock::time_point modifiedSince); > static void removeMediaKeys(const String& mediaKeysStorageDirectory, const HashSet<RefPtr<WebCore::SecurityOrigin>>&); >+ static void removeSearchFieldRecentSearches(std::chrono::system_clock::time_point modifiedSince); > > const uint64_t m_identifier; > const WebCore::SessionID m_sessionID; >-- >2.4.7 (Apple Git-59) >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 150019
:
262876
|
263034
|
263036
|
263173
|
263184
|
263526
|
263894
|
264142
|
264196