Bug 44116 - Move BlobRegistry interface and implementation to platform/network
Summary: Move BlobRegistry interface and implementation to platform/network
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: WebCore JavaScript (show other bugs)
Version: 528+ (Nightly build)
Hardware: All All
: P2 Normal
Assignee: Jian Li
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-08-17 10:04 PDT by Jian Li
Modified: 2010-08-18 12:05 PDT (History)
4 users (show)

See Also:


Attachments
Proposed Patch (72.21 KB, patch)
2010-08-17 10:08 PDT, Jian Li
fishd: review+
jianli: commit-queue-
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Jian Li 2010-08-17 10:04:47 PDT
This is to address fishd's feedback at bug 43871. We want to move BlobRegistry interface and implementation to a better place: platform/network. We also need to move BlobData and BlobStorageData.
Comment 1 Jian Li 2010-08-17 10:08:32 PDT
Created attachment 64603 [details]
Proposed Patch
Comment 2 Darin Fisher (:fishd, Google) 2010-08-17 10:21:38 PDT
Comment on attachment 64603 [details]
Proposed Patch

WebCore/platform/network/BlobData.h:65
 +      BlobDataItem(const String& path)
explicit?

WebCore/platform/network/BlobData.h:55
 +      BlobDataItem(const CString& data)
explicit?

WebCore/platform/network/BlobRegistry.h:59
 +      virtual ~BlobRegistry() { }
can this destructor be protected?

WebCore/platform/network/BlobRegistry.h:53
 +      virtual void registerBlobURL(const KURL&, PassOwnPtr<BlobData>) = 0;
i think it would be helpful to document these methods.  it is at least not
entirely obvious what the second form of registerBlobURL means.

WebCore/platform/network/BlobRegistry.h:51
 +      static BlobRegistry& instance();
i think a global WebCore::blobRegistry() method would be more conventional
for WebCore.

WebCore/platform/network/BlobStorageData.h:41
 +  struct BlobStorageDataItem {
there seems to be unfortunate repetition between BlobDataItem
and BlobStorageDataItem.  have you considered reusing BlobDataItem
here?

WebCore/platform/network/BlobRegistryImpl.h:62
 +      PassRefPtr<BlobStorageData> getBlobDataFromURL(const KURL&) const;
why not just reuse BlobData here?  you can say that getBlobDataFromURL
returns a "canonical" BlobData that has all Blob references resolved
to either Data or File references.  it just seems like it would be
simpler to have fewer classes.
Comment 3 Darin Fisher (:fishd, Google) 2010-08-17 10:22:51 PDT
Comment on attachment 64603 [details]
Proposed Patch

Since this bug is really just about moving the files, I'm going to R+.  The
other suggested changes can certainly happen separately if you prefer.
Comment 4 Jian Li 2010-08-17 10:27:07 PDT
(In reply to comment #3)
> (From update of attachment 64603 [details])
> Since this bug is really just about moving the files, I'm going to R+.  The
> other suggested changes can certainly happen separately if you prefer.

I originally plan to change to use blobRegistry() in another patch. Since you have more feedbacks, I will address all of them in another patch.
Comment 5 Kinuko Yasuda 2010-08-17 16:19:00 PDT
I assume this move implies that we'll have BlobResourceHandle in platform/network too and consequently we'll want to move FileStream and related stuff under platform.  Is that the case?
(We have a reference to blob in unimplemented FileStream::write but it can be replaced with a file path or blob ID)

(By the way I thought it'd be good to have separate classes for BlobStorageData and BlobData - but ok they look VERY similar so it'd be better to unify them.  Sorry Jian if I contributed to the decision.)
Comment 6 Jian Li 2010-08-17 16:33:19 PDT
(In reply to comment #5)
> I assume this move implies that we'll have BlobResourceHandle in platform/network too and consequently we'll want to move FileStream and related stuff under platform.  Is that the case?
> (We have a reference to blob in unimplemented FileStream::write but it can be replaced with a file path or blob ID)
> 
> (By the way I thought it'd be good to have separate classes for BlobStorageData and BlobData - but ok they look VERY similar so it'd be better to unify them.  Sorry Jian if I contributed to the decision.)

Ideally BlobResourceHandle should be put in platform/network and FileStream and FileStreamProxy should be moved to platform/network. However, there're some kind of dependency violations we need to resolve.

The first one is reference to blob in FileStream::write. This can be resolved as you suggest. In addition, we cannot pass Blob object between thread.

The other one is reference to ScriptExecutionContext (and CrossThreadTask) in FileStreamProxy and BlobResourceHandle. This is needed to post task to different thread. I am not sure if there is a good way to fix this. We could add something like postTask to ResourceHandleClient. However, Task is defined in dom/ScriptExecutionContext.
Comment 7 Kinuko Yasuda 2010-08-17 16:49:44 PDT
(In reply to comment #6)
> Ideally BlobResourceHandle should be put in platform/network and FileStream and FileStreamProxy should be moved to platform/network. However, there're some kind of dependency violations we need to resolve.
> 
> The first one is reference to blob in FileStream::write. This can be resolved as you suggest. In addition, we cannot pass Blob object between thread.
> 
> The other one is reference to ScriptExecutionContext (and CrossThreadTask) in FileStreamProxy and BlobResourceHandle. This is needed to post task to different thread. I am not sure if there is a good way to fix this. We could add something like postTask to ResourceHandleClient. However, Task is defined in dom/ScriptExecutionContext.

Ah, you're right there're more dependencies.  ...I see so it needs more consideration to move BlobResourceHandle.
Comment 8 Jian Li 2010-08-18 12:05:44 PDT
Committed as http://trac.webkit.org/changeset/65526.