WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
209016
[ iOS and Mac wk2 ] http/tests/in-app-browser-privacy/ tests failing.
https://bugs.webkit.org/show_bug.cgi?id=209016
Summary
[ iOS and Mac wk2 ] http/tests/in-app-browser-privacy/ tests failing.
Kate Cheney
Reported
2020-03-12 13:44:38 PDT
These started failing again after fixing <
rdar://problem/60250973
>
Attachments
Patch
(9.93 KB, patch)
2020-03-12 14:32 PDT
,
Kate Cheney
no flags
Details
Formatted Diff
Diff
Patch
(10.00 KB, patch)
2020-03-12 14:55 PDT
,
Kate Cheney
no flags
Details
Formatted Diff
Diff
Patch
(10.06 KB, patch)
2020-03-13 12:43 PDT
,
Kate Cheney
no flags
Details
Formatted Diff
Diff
Patch
(11.11 KB, patch)
2020-03-13 13:53 PDT
,
Kate Cheney
no flags
Details
Formatted Diff
Diff
Show Obsolete
(3)
View All
Add attachment
proposed patch, testcase, etc.
Kate Cheney
Comment 1
2020-03-12 13:45:24 PDT
<
rdar://problem/60329530
>
Kate Cheney
Comment 2
2020-03-12 14:32:21 PDT
Created
attachment 393414
[details]
Patch
Kate Cheney
Comment 3
2020-03-12 14:55:19 PDT
Created
attachment 393417
[details]
Patch
Chris Dumez
Comment 4
2020-03-13 10:46:39 PDT
Comment on
attachment 393417
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=393417&action=review
> Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h:168 > +WK_EXPORT void WKWebsiteDataStoreReinitializeAppBoundDomains(WKWebsiteDataStoreRef dataStoreRef, void* context, WKWebsiteDataStoreReinitializeAppBoundDomainsFunction completionHandler);
This does not seem to need to completion handler since it is sync.
> Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:515 > +void WebsiteDataStore::reinitializeAppBoundDomains(CompletionHandler<void()>&& completionHandler)
This does not seem to need to completion handler since it is sync.
> Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:518 > + initializeAppBoundDomains();
What clears existing app bound domains? It seems initializeAppBoundDomains() will just keep adding more but I do not think anything doing the clearing.
Kate Cheney
Comment 5
2020-03-13 10:48:48 PDT
(In reply to Chris Dumez from
comment #4
)
> Comment on
attachment 393417
[details]
> Patch > > View in context: >
https://bugs.webkit.org/attachment.cgi?id=393417&action=review
> > > Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h:168 > > +WK_EXPORT void WKWebsiteDataStoreReinitializeAppBoundDomains(WKWebsiteDataStoreRef dataStoreRef, void* context, WKWebsiteDataStoreReinitializeAppBoundDomainsFunction completionHandler); > > This does not seem to need to completion handler since it is sync. > > > Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:515 > > +void WebsiteDataStore::reinitializeAppBoundDomains(CompletionHandler<void()>&& completionHandler) > > This does not seem to need to completion handler since it is sync. >
Great! I will remove this.
> > Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:518 > > + initializeAppBoundDomains(); > > What clears existing app bound domains? It seems initializeAppBoundDomains() > will just keep adding more but I do not think anything doing the clearing.
Good point, I will change this to clear before re-initializing
Kate Cheney
Comment 6
2020-03-13 12:43:44 PDT
Created
attachment 393519
[details]
Patch
Chris Dumez
Comment 7
2020-03-13 13:05:19 PDT
Comment on
attachment 393519
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=393519&action=review
> Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:527 > + hasInitializedAppBoundDomains = false;
I think that for this code to actually be correct, you'd have to reset hasInitializedAppBoundDomains to false in the lambda inside clearAppBoundDomains(), after clearing the domains. That said, I think we can simplify this code a lot like by tweaking existing code like so: enum class ForceReinitialization : bool { No, Yes }; void WebsiteDataStore::initializeAppBoundDomains(ForceReinitialization forceReinitialization) { ASSERT(RunLoop::isMain()); if (hasInitializedAppBoundDomains && forceReinitialization != ForceReinitialization::Yes) // Updated return; static const auto maxAppBoundDomainCount = 10; appBoundDomainQueue().dispatch([forceReinitialization] () mutable { if (hasInitializedAppBoundDomains && forceReinitialization != ForceReinitialization::Yes) // Updated return; NSArray<NSString *> *domains = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"WKAppBoundDomains"]; RunLoop::main().dispatch([forceReinitialization , domains = retainPtr(domains)] { if ( forceReinitialization == ForceReinitialization::Yes) // New appBoundDomains().clear(); // New for (NSString *domain in domains.get()) { URL url { URL(), domain }; if (!url.isValid()) continue; WebCore::RegistrableDomain appBoundDomain { url }; if (appBoundDomain.isEmpty()) continue; appBoundDomains().add(appBoundDomain); if (appBoundDomains().size() >= maxAppBoundDomainCount) break; } WEBSITE_DATA_STORE_ADDITIONS hasInitializedAppBoundDomains = true; }); }); } Then you only have to call initializeAppBoundDomains(ForceReinitialization::Yes) in your new reinitializeAppBoundDomains() method. What do you think?
Chris Dumez
Comment 8
2020-03-13 13:13:50 PDT
(In reply to Chris Dumez from
comment #7
)
> Comment on
attachment 393519
[details]
> Patch > > View in context: >
https://bugs.webkit.org/attachment.cgi?id=393519&action=review
> > > Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:527 > > + hasInitializedAppBoundDomains = false; > > I think that for this code to actually be correct, you'd have to reset > hasInitializedAppBoundDomains to false in the lambda inside > clearAppBoundDomains(), after clearing the domains. That said, I think we > can simplify this code a lot like by tweaking existing code like so: > > enum class ForceReinitialization : bool { No, Yes }; > void WebsiteDataStore::initializeAppBoundDomains(ForceReinitialization > forceReinitialization) > { > ASSERT(RunLoop::isMain()); > > if (hasInitializedAppBoundDomains && forceReinitialization != > ForceReinitialization::Yes) // Updated > return; > > static const auto maxAppBoundDomainCount = 10; > > appBoundDomainQueue().dispatch([forceReinitialization] () mutable { > if (hasInitializedAppBoundDomains && forceReinitialization != > ForceReinitialization::Yes) // Updated > return; > > NSArray<NSString *> *domains = [[NSBundle mainBundle] > objectForInfoDictionaryKey:@"WKAppBoundDomains"]; > > RunLoop::main().dispatch([forceReinitialization , domains = > retainPtr(domains)] { > if ( forceReinitialization == ForceReinitialization::Yes) // New > appBoundDomains().clear(); // New > > for (NSString *domain in domains.get()) { > URL url { URL(), domain }; > if (!url.isValid()) > continue; > WebCore::RegistrableDomain appBoundDomain { url }; > if (appBoundDomain.isEmpty()) > continue; > appBoundDomains().add(appBoundDomain); > if (appBoundDomains().size() >= maxAppBoundDomainCount) > break; > } > WEBSITE_DATA_STORE_ADDITIONS > hasInitializedAppBoundDomains = true; > }); > }); > } > > Then you only have to call > initializeAppBoundDomains(ForceReinitialization::Yes) in your new > reinitializeAppBoundDomains() method. > > What do you think?
Actually, I think you have to reset hasInitializedAppBoundDomains synchronously to false on the main thread to avoid flakiness. Here is a counter proposal then: void WebsiteDataStore::reinitializeAppBoundDomains() { if (!hasInitializedAppBoundDomains) return; appBoundDomains().clear(); hasInitializedAppBoundDomains = false; initializeAppBoundDomains(); }
Kate Cheney
Comment 9
2020-03-13 13:32:47 PDT
(In reply to Chris Dumez from
comment #7
)
> Comment on
attachment 393519
[details]
> Patch > > View in context: >
https://bugs.webkit.org/attachment.cgi?id=393519&action=review
> > > Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:527 > > + hasInitializedAppBoundDomains = false; > > I think that for this code to actually be correct, you'd have to reset > hasInitializedAppBoundDomains to false in the lambda inside > clearAppBoundDomains(), after clearing the domains. That said, I think we > can simplify this code a lot like by tweaking existing code like so: > > enum class ForceReinitialization : bool { No, Yes }; > void WebsiteDataStore::initializeAppBoundDomains(ForceReinitialization > forceReinitialization) > { > ASSERT(RunLoop::isMain()); > > if (hasInitializedAppBoundDomains && forceReinitialization != > ForceReinitialization::Yes) // Updated > return; > > static const auto maxAppBoundDomainCount = 10; > > appBoundDomainQueue().dispatch([forceReinitialization] () mutable { > if (hasInitializedAppBoundDomains && forceReinitialization != > ForceReinitialization::Yes) // Updated > return; > > NSArray<NSString *> *domains = [[NSBundle mainBundle] > objectForInfoDictionaryKey:@"WKAppBoundDomains"]; > > RunLoop::main().dispatch([forceReinitialization , domains = > retainPtr(domains)] { > if ( forceReinitialization == ForceReinitialization::Yes) // New > appBoundDomains().clear(); // New > > for (NSString *domain in domains.get()) { > URL url { URL(), domain }; > if (!url.isValid()) > continue; > WebCore::RegistrableDomain appBoundDomain { url }; > if (appBoundDomain.isEmpty()) > continue; > appBoundDomains().add(appBoundDomain); > if (appBoundDomains().size() >= maxAppBoundDomainCount) > break; > } > WEBSITE_DATA_STORE_ADDITIONS > hasInitializedAppBoundDomains = true; > }); > }); > } > > Then you only have to call > initializeAppBoundDomains(ForceReinitialization::Yes) in your new > reinitializeAppBoundDomains() method. > > What do you think?
This looks good! With the addition of setting hasInitializedAppBoundDomains = false before calling this in reinitializeAppBoundDomains
Kate Cheney
Comment 10
2020-03-13 13:53:43 PDT
Created
attachment 393525
[details]
Patch
WebKit Commit Bot
Comment 11
2020-03-13 14:57:01 PDT
Comment on
attachment 393525
[details]
Patch Clearing flags on attachment: 393525 Committed
r258436
: <
https://trac.webkit.org/changeset/258436
>
WebKit Commit Bot
Comment 12
2020-03-13 14:57:03 PDT
All reviewed patches have been landed. Closing bug.
Radar WebKit Bug Importer
Comment 13
2020-03-13 14:58:17 PDT
<
rdar://problem/60435282
>
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug