Changeset 140875 in webkit
- Timestamp:
- Jan 25, 2013 4:10:46 PM (11 years ago)
- Location:
- trunk/Source
- Files:
-
- 2 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r140873 r140875 1 2013-01-25 Andy Estes <aestes@apple.com> 2 3 Wrap content filtering code in an object 4 https://bugs.webkit.org/show_bug.cgi?id=107914 5 6 Reviewed by Alexey Proskuryakov. 7 8 Content filtering code currently requires explicit and somewhat complex 9 lifetime management of the WebFilterEvaluator object for correct 10 behavior. Simplify this by wrapping WebFilterEvaluator in an object and 11 have MainResourceLoader implicitly manage its lifetime by holding it in 12 an OwnPtr. 13 14 This change has benefits other than the simplified lifetime management. 15 It removes direct calls into WebKitSystemInterface from the loader, and 16 it allows us to keep a strong reference to the replacement data 17 returned from wkFilterAddData() and wkFilterDataComplete() rather than 18 relying on it being autoreleased. 19 20 * WebCore.exp.in: Updated to match changes in WebCoreSystemInterface. 21 * WebCore.xcodeproj/project.pbxproj: Added new files. 22 * loader/MainResourceLoader.cpp: 23 (WebCore::MainResourceLoader::MainResourceLoader): Removed unneeded initialization. 24 (WebCore::MainResourceLoader::~MainResourceLoader): Removed an unneeded ASSERT(). 25 (WebCore::MainResourceLoader::cancel): Removed unneeded wkFilterRelease(). 26 (WebCore::MainResourceLoader::responseReceived): Created a 27 ContentFilter object rather than calling wkFilterCreateInstance(). 28 (WebCore::MainResourceLoader::dataReceived): Rewrote content filtering 29 logic in terms of the wrapper object. Removed any explicit lifetime 30 management. 31 (WebCore::MainResourceLoader::didFinishLoading): Ditto. 32 (WebCore::MainResourceLoader::notifyFinished): Removed unneeded wkFilterRelease(). 33 * loader/MainResourceLoader.h: 34 * platform/ContentFilter.h: Added. 35 * platform/mac/ContentFilterMac.mm: Added. 36 (WebCore::ContentFilter::create): 37 (WebCore::ContentFilter::ContentFilter): 38 (WebCore::ContentFilter::isEnabled): Returned the result of wkFilterIsManagedSession(). 39 (WebCore::ContentFilter::addData): Called wkFilterAddData() and stored 40 the resulting NSData in m_replacementData. 41 (WebCore::ContentFilter::finishedAddingData): Called wkFilterDataComplete() 42 and stored the resulting NSData in m_replacementData. 43 (WebCore::ContentFilter::needsMoreData): Returned the result of wkFilterIsBuffering(). 44 (WebCore::ContentFilter::didBlockData): Returned the result of wkFilterWasBlocked(). 45 (WebCore::ContentFilter::getReplacementData): Returned the data stored in m_replacementData. 46 * platform/mac/WebCoreSystemInterface.h: Updated to reflect changes in WKSI. 47 * platform/mac/WebCoreSystemInterface.mm: Ditto. 48 49 * WebCore.exp.in: 50 * WebCore.xcodeproj/project.pbxproj: 51 * loader/MainResourceLoader.cpp: 52 (WebCore::MainResourceLoader::MainResourceLoader): 53 (WebCore::MainResourceLoader::~MainResourceLoader): 54 (WebCore::MainResourceLoader::cancel): 55 (WebCore::MainResourceLoader::responseReceived): 56 (WebCore::MainResourceLoader::dataReceived): 57 (WebCore::MainResourceLoader::didFinishLoading): 58 (WebCore::MainResourceLoader::notifyFinished): 59 * loader/MainResourceLoader.h: 60 (MainResourceLoader): 61 * platform/ContentFilter.h: Added. 62 (WebCore): 63 (ContentFilter): 64 * platform/mac/ContentFilterMac.mm: Added. 65 (WebCore): 66 (WebCore::ContentFilter::create): 67 (WebCore::ContentFilter::ContentFilter): 68 (WebCore::ContentFilter::isEnabled): 69 (WebCore::ContentFilter::addData): 70 (WebCore::ContentFilter::finishedAddingData): 71 (WebCore::ContentFilter::needsMoreData): 72 (WebCore::ContentFilter::didBlockData): 73 (WebCore::ContentFilter::getReplacementData): 74 * platform/mac/WebCoreSystemInterface.h: 75 * platform/mac/WebCoreSystemInterface.mm: 76 1 77 2013-01-25 Simon Fraser <simon.fraser@apple.com> 2 78 -
trunk/Source/WebCore/WebCore.exp.in
r140572 r140875 2158 2158 _wkFilterCreateInstance 2159 2159 _wkFilterDataComplete 2160 _wkFilterIsBuffering 2160 2161 _wkFilterIsManagedSession 2161 _wkFilterRelease2162 2162 _wkFilterWasBlocked 2163 2163 #endif -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r140863 r140875 748 748 2917B5631473496C0052C9D0 /* LayerFlushSchedulerClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 2917B5601473496C0052C9D0 /* LayerFlushSchedulerClient.h */; settings = {ATTRIBUTES = (Private, ); }; }; 749 749 2917B566147349950052C9D0 /* LayerFlushSchedulerMac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2917B565147349950052C9D0 /* LayerFlushSchedulerMac.cpp */; }; 750 2919A1E916B3376600787213 /* ContentFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2919A1E816B3376600787213 /* ContentFilter.h */; settings = {ATTRIBUTES = (Private, ); }; }; 751 2919A1EB16B3378900787213 /* ContentFilterMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2919A1EA16B3378900787213 /* ContentFilterMac.mm */; }; 750 752 293EAE1F1356B2FE0067ACF9 /* RuntimeApplicationChecks.h in Headers */ = {isa = PBXBuildFile; fileRef = 293EAE1E1356B2FE0067ACF9 /* RuntimeApplicationChecks.h */; settings = {ATTRIBUTES = (Private, ); }; }; 751 753 293EAE211356B32E0067ACF9 /* RuntimeApplicationChecks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 293EAE201356B32E0067ACF9 /* RuntimeApplicationChecks.cpp */; }; … … 8006 8008 2917B5601473496C0052C9D0 /* LayerFlushSchedulerClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LayerFlushSchedulerClient.h; path = ca/LayerFlushSchedulerClient.h; sourceTree = "<group>"; }; 8007 8009 2917B565147349950052C9D0 /* LayerFlushSchedulerMac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LayerFlushSchedulerMac.cpp; path = ca/mac/LayerFlushSchedulerMac.cpp; sourceTree = "<group>"; }; 8010 2919A1E816B3376600787213 /* ContentFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContentFilter.h; sourceTree = "<group>"; }; 8011 2919A1EA16B3378900787213 /* ContentFilterMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ContentFilterMac.mm; sourceTree = "<group>"; }; 8008 8012 293EAE1E1356B2FE0067ACF9 /* RuntimeApplicationChecks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RuntimeApplicationChecks.h; sourceTree = "<group>"; }; 8009 8013 293EAE201356B32E0067ACF9 /* RuntimeApplicationChecks.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RuntimeApplicationChecks.cpp; sourceTree = "<group>"; }; … … 16058 16062 2D90660B0665D937006B6F1A /* ClipboardMac.h */, 16059 16063 2D90660C0665D937006B6F1A /* ClipboardMac.mm */, 16064 2919A1EA16B3378900787213 /* ContentFilterMac.mm */, 16060 16065 06027CB20B1CC03D00884B2D /* ContextMenuItemMac.mm */, 16061 16066 93B6A0E90B0BCA8400F5027A /* ContextMenuMac.mm */, … … 21312 21317 C37CDEBC149EF2030042090D /* ColorChooserClient.h */, 21313 21318 BCC8CFCA0986CD2400140BF2 /* ColorData.gperf */, 21319 2919A1E816B3376600787213 /* ContentFilter.h */, 21314 21320 41D015C90F4B5C71004A662F /* ContentType.cpp */, 21315 21321 41D015C80F4B5C71004A662F /* ContentType.h */, … … 26281 26287 FB91392A16AE4FC0001FE682 /* JSDOMPath.h in Headers */, 26282 26288 2E07753416B1BD4C004D9936 /* MicroDataAttributeTokenList.h in Headers */, 26289 2919A1E916B3376600787213 /* ContentFilter.h in Headers */, 26283 26290 ); 26284 26291 runOnlyForDeploymentPostprocessing = 0; … … 29432 29439 FB91392B16AE4FC0001FE682 /* JSDOMPath.cpp in Sources */, 29433 29440 2E07753116B1BD13004D9936 /* MicroDataAttributeTokenList.cpp in Sources */, 29441 2919A1EB16B3378900787213 /* ContentFilterMac.mm in Sources */, 29434 29442 ); 29435 29443 runOnlyForDeploymentPostprocessing = 0; -
trunk/Source/WebCore/loader/MainResourceLoader.cpp
r140366 r140875 63 63 64 64 #if USE(CONTENT_FILTERING) 65 #include " WebCoreSystemInterface.h"65 #include "ContentFilter.h" 66 66 #endif 67 67 … … 75 75 , m_timeOfLastDataReceived(0.0) 76 76 , m_substituteDataLoadIdentifier(0) 77 #if USE(CONTENT_FILTERING)78 , m_filter(0)79 #endif80 77 { 81 78 } … … 84 81 { 85 82 clearResource(); 86 #if USE(CONTENT_FILTERING)87 ASSERT(!m_filter);88 #endif89 83 } 90 84 … … 136 130 clearResource(); 137 131 receivedError(resourceError); 138 139 #if USE(CONTENT_FILTERING)140 if (m_filter) {141 wkFilterRelease(m_filter);142 m_filter = 0;143 }144 #endif145 132 } 146 133 … … 455 442 456 443 #if USE(CONTENT_FILTERING) 457 if (r.url().protocolIs("https") && wkFilterIsManagedSession())458 m_ filter = wkFilterCreateInstance(r.nsURLResponse());444 if (r.url().protocolIs("https") && ContentFilter::isEnabled()) 445 m_contentFilter = ContentFilter::create(r); 459 446 #endif 460 447 … … 485 472 486 473 #if USE(CONTENT_FILTERING) 487 if (m_filter) { 488 ASSERT(!wkFilterWasBlocked(m_filter)); 489 const char* blockedData = wkFilterAddData(m_filter, data, &length); 490 // If we don't have blockedData, that means we're still accumulating data 491 if (!blockedData) { 492 // Transition to committed state. 474 bool loadWasBlockedBeforeFinishing = false; 475 if (m_contentFilter && m_contentFilter->needsMoreData()) { 476 m_contentFilter->addData(data, length); 477 478 if (m_contentFilter->needsMoreData()) { 479 // Since the filter still needs more data to make a decision, 480 // transition back to the committed state so that we don't partially 481 // load content that might later be blocked. 493 482 documentLoader()->receivedData(0, 0); 494 483 return; 495 484 } 496 485 497 data = blockedData; 486 data = m_contentFilter->getReplacementData(length); 487 loadWasBlockedBeforeFinishing = m_contentFilter->didBlockData(); 498 488 } 499 489 #endif … … 513 503 514 504 #if USE(CONTENT_FILTERING) 515 if (WebFilterEvaluator *filter = m_filter) { 516 // If we got here, it means we know if we were blocked or not. If we were blocked, we're 517 // done loading the page altogether. Either way, we don't need the filter anymore. 518 519 // Remove this->m_filter early so didFinishLoading doesn't see it. 520 m_filter = 0; 521 if (wkFilterWasBlocked(filter)) 522 cancel(); 523 wkFilterRelease(filter); 524 } 505 if (loadWasBlockedBeforeFinishing) 506 cancel(); 525 507 #endif 526 508 } … … 545 527 546 528 #if USE(CONTENT_FILTERING) 547 if (m_filter) { 529 if (m_contentFilter && m_contentFilter->needsMoreData()) { 530 m_contentFilter->finishedAddingData(); 531 548 532 int length; 549 const char* data = wkFilterDataComplete(m_filter, &length); 550 WebFilterEvaluator *filter = m_filter; 551 // Remove this->m_filter early so didReceiveData doesn't see it. 552 m_filter = 0; 533 const char* data = m_contentFilter->getReplacementData(length); 553 534 if (data) 554 535 dataReceived(m_resource.get(), data, length); 555 wkFilterRelease(filter);556 536 } 557 537 #endif … … 579 559 return; 580 560 } 581 582 #if USE(CONTENT_FILTERING)583 if (m_filter) {584 wkFilterRelease(m_filter);585 m_filter = 0;586 }587 #endif588 561 589 562 const ResourceError& error = m_resource->resourceError(); -
trunk/Source/WebCore/loader/MainResourceLoader.h
r140366 r140875 37 37 #include <wtf/Forward.h> 38 38 39 #if USE(CONTENT_FILTERING)40 OBJC_CLASS WebFilterEvaluator;41 #endif42 43 39 #if HAVE(RUNLOOP_TIMER) 44 40 #include "RunLoopTimer.h" … … 51 47 class FormState; 52 48 class ResourceRequest; 49 50 #if USE(CONTENT_FILTERING) 51 class ContentFilter; 52 #endif 53 53 54 54 class MainResourceLoader : public RefCounted<MainResourceLoader>, public CachedRawResourceClient { … … 132 132 133 133 #if USE(CONTENT_FILTERING) 134 WebFilterEvaluator *m_filter;134 OwnPtr<ContentFilter> m_contentFilter; 135 135 #endif 136 136 }; -
trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.h
r140366 r140875 340 340 extern BOOL (*wkFilterIsManagedSession)(void); 341 341 extern WebFilterEvaluator *(*wkFilterCreateInstance)(NSURLResponse *); 342 extern void (*wkFilterRelease)(WebFilterEvaluator *);343 342 extern BOOL (*wkFilterWasBlocked)(WebFilterEvaluator *); 344 extern const char* (*wkFilterAddData)(WebFilterEvaluator *, const char* data, int* length); 345 extern const char* (*wkFilterDataComplete)(WebFilterEvaluator *, int* length); 343 extern BOOL (*wkFilterIsBuffering)(WebFilterEvaluator *); 344 extern NSData *(*wkFilterAddData)(WebFilterEvaluator *, NSData *); 345 extern NSData *(*wkFilterDataComplete)(WebFilterEvaluator *); 346 346 #endif 347 347 -
trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.mm
r140366 r140875 212 212 BOOL (*wkFilterIsManagedSession)(void); 213 213 WebFilterEvaluator *(*wkFilterCreateInstance)(NSURLResponse *); 214 void (*wkFilterRelease)(WebFilterEvaluator *);215 214 BOOL (*wkFilterWasBlocked)(WebFilterEvaluator *); 216 const char* (*wkFilterAddData)(WebFilterEvaluator *, const char* data, int* length); 217 const char* (*wkFilterDataComplete)(WebFilterEvaluator *, int* length); 215 BOOL (*wkFilterIsBuffering)(WebFilterEvaluator *); 216 NSData *(*wkFilterAddData)(WebFilterEvaluator *, NSData *); 217 NSData *(*wkFilterDataComplete)(WebFilterEvaluator *); 218 218 #endif 219 219 -
trunk/Source/WebKit/mac/ChangeLog
r140793 r140875 1 2013-01-25 Andy Estes <aestes@apple.com> 2 3 Wrap content filtering code in an object 4 https://bugs.webkit.org/show_bug.cgi?id=107914 5 6 Reviewed by Alexey Proskuryakov. 7 8 * WebCoreSupport/WebSystemInterface.mm: 9 (InitWebCoreSystemInterface): Updated to reflect changes in WKSI. 10 1 11 2013-01-24 Dan Bernstein <mitz@apple.com> 2 12 -
trunk/Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm
r140366 r140875 209 209 INIT(FilterIsManagedSession); 210 210 INIT(FilterCreateInstance); 211 INIT(FilterRelease);212 211 INIT(FilterWasBlocked); 212 INIT(FilterIsBuffering); 213 213 INIT(FilterAddData); 214 214 INIT(FilterDataComplete); -
trunk/Source/WebKit2/ChangeLog
r140874 r140875 1 2013-01-25 Andy Estes <aestes@apple.com> 2 3 Wrap content filtering code in an object 4 https://bugs.webkit.org/show_bug.cgi?id=107914 5 6 Reviewed by Alexey Proskuryakov. 7 8 * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm: 9 (InitWebCoreSystemInterface): Updated to reflect changes in WKSI. 10 1 11 2013-01-25 Brady Eidson <beidson@apple.com> 2 12 -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm
r140366 r140875 172 172 INIT(FilterIsManagedSession); 173 173 INIT(FilterCreateInstance); 174 INIT(FilterRelease);175 174 INIT(FilterWasBlocked); 175 INIT(FilterIsBuffering); 176 176 INIT(FilterAddData); 177 177 INIT(FilterDataComplete);
Note: See TracChangeset
for help on using the changeset viewer.