On Wed, Oct 14, 2009 at 4:51 PM, Jeremy Orlow <jor...@chromium.org> wrote:
> You mean string16, right? I see instances of std::string and string16. I would be happiest if we unified on one. string16 is probably the path of least resistance. std::string has the benefit of being more compact, which for something like this which is really just a bag of bytes is probably a good thing. > > I really don't think it buys us much if it's purely optional that people > put the security origin (in string representation) into a wrapper that then > blocks them from doing anything silly with it. > we could give it a ToString() method. i think the point of SecurityOrigin would be to guide people in the right direction. -darin > > More to the point, I don't think it's useful enough that I'm going to > bother implementing it. If someone else wants to, I'd probably use it. > > > On Wed, Oct 14, 2009 at 4:47 PM, Darin Fisher <da...@chromium.org> wrote: > >> To be clear: I only weakly advocate Chrome having a SecurityOrigin. I'm >> also OKwith just using std::string. I think either is better than using >> GURL. >> >> -Darin >> >> >> On Wed, Oct 14, 2009 at 4:45 PM, Darin Fisher <da...@chromium.org> wrote: >> >>> Hmm... it seems useful as a means of making the code more >>> self-documenting anda bit safer. I'd rather not have people passing >>> strings for origins since they might be >>> tempted to parse the strings. >>> >>> The momentary translation to strings on the boundary of the WebKit API >>> does not >>> completely make this fragile. If the end-points in Chrome use >>> SecurityOrigin and >>> the end-points in the WebKit API use WebSecurityOrigin, then developers >>> will be >>> naturally inclined to convert between SecurityOrigin and >>> WebSecurityOrigin, >>> ignoring the toString() getter on WebSecurityOrigin. >>> >>> This is a case where existing code should help guide people in the right >>> direction. >>> >>> -Darin >>> >>> >>> >>> On Wed, Oct 14, 2009 at 4:39 PM, Jeremy Orlow <jor...@chromium.org>wrote: >>> >>>> If this is the case, then I don't think a SecurityOrigin wrapper buys us >>>> anything. Never mind. >>>> >>>> >>>> On Wed, Oct 14, 2009 at 4:37 PM, Darin Fisher <da...@chromium.org>wrote: >>>> >>>>> >>>>> >>>>> On Wed, Oct 14, 2009 at 3:59 PM, Jeremy Orlow <jor...@chromium.org>wrote: >>>>> >>>>>> On Wed, Oct 14, 2009 at 2:48 PM, Darin Fisher <da...@chromium.org>wrote: >>>>>> >>>>>>> On Wed, Oct 14, 2009 at 2:47 PM, Darin Fisher <da...@chromium.org>wrote: >>>>>>> >>>>>>>> On Wed, Oct 14, 2009 at 2:30 PM, Jeremy Orlow >>>>>>>> <jor...@chromium.org>wrote: >>>>>>>> >>>>>>>>> On Wed, Oct 14, 2009 at 2:23 PM, Darin Fisher >>>>>>>>> <da...@chromium.org>wrote: >>>>>>>>> >>>>>>>>>> On Wed, Oct 14, 2009 at 2:08 PM, Jeremy Orlow < >>>>>>>>>> jor...@chromium.org> wrote: >>>>>>>>>> >>>>>>>>>>> On Wed, Oct 14, 2009 at 2:00 PM, Michael Nordman < >>>>>>>>>>> micha...@google.com> wrote: >>>>>>>>>>> >>>>>>>>>>>> +1 SecurityOrigin class >>>>>>>>>>>> Sounds like a reasonable plan. >>>>>>>>>>>> I suspect there may already be cases where we're actually >>>>>>>>>>>> comparing a chrome generated security origin, as produced by >>>>>>>>>>>> GURL.GetOrigin(), with a webkit generated security origin, as >>>>>>>>>>>> produced by >>>>>>>>>>>> WebSecurityOrigin.toString(). So we may want to accelerate the >>>>>>>>>>>> part of the >>>>>>>>>>>> plan to do more than opaquely pass around and test webkit generated >>>>>>>>>>>> representations. >>>>>>>>>>>> >>>>>>>>>>>> Also, I think dumi has a use case to crack it open in order to >>>>>>>>>>>> form file path elements of the form 'scheme_host_port' >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Actually, Dumi's case is slightly different. He wants to get >>>>>>>>>>> SecurityOrigin::databaseIdentifier, right? Maybe WebSecurityOrigin >>>>>>>>>>> should >>>>>>>>>>> have a databaseIdentifier() method that outputs a FilePath object? >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Dumi has such a method in a CL that he is working on at the >>>>>>>>>> moment. Also, note: we don't have a way to use FilePath from the >>>>>>>>>> WebKit >>>>>>>>>> API, and I'm not sure that we should. We use WebString for file >>>>>>>>>> paths in >>>>>>>>>> the WebKit API. >>>>>>>>>> >>>>>>>>> >>>>>>>>> So then he's adding such a method to WebSecurityOrigin that returns >>>>>>>>> a string? If so, sounds good. What's the CL, btw? >>>>>>>>> >>>>>>>> >>>>>>>> Yes: >>>>>>>> http://codereview.chromium.org/256073/diff/11001/11029 >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>>> ... and why not use strings? >>>>>>>>>>>> * does the string contain a trailing slash, or not? >>>>>>>>>>>> * in the default port case, does the string contain the default >>>>>>>>>>>> port number or not? >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> WebCore::SecurityOrigin handles these for us. I'll make it >>>>>>>>>>> difficult for a base::SecurityOrigin to be constructed any way >>>>>>>>>>> besides it >>>>>>>>>>> coming from WebKit::WebSecurityOrigin (which only comes from >>>>>>>>>>> WebCore::WebSecurityOrigin). We can then deal with these details >>>>>>>>>>> only >>>>>>>>>>> if/when we need to. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Wed, Oct 14, 2009 at 1:36 PM, Jeremy Orlow < >>>>>>>>>>>> jor...@chromium.org> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Right now, we don't have a good story for what to do with >>>>>>>>>>>>> WebCore::SecurityOrigins in Chromium. We now have a >>>>>>>>>>>>> WebSecurityOrigin in >>>>>>>>>>>>> WebKit, but if you want to move the data between processes, you >>>>>>>>>>>>> need to >>>>>>>>>>>>> convert it to a string and then send that. In some cases we then >>>>>>>>>>>>> convert >>>>>>>>>>>>> the string to a GURL, but this seems like the wrong thing to do >>>>>>>>>>>>> (more on >>>>>>>>>>>>> this in a sec). >>>>>>>>>>>>> To me, the right answer is to create a type in base called >>>>>>>>>>>>> SecurityOrigin that wraps a string and does equality checks. The >>>>>>>>>>>>> equality >>>>>>>>>>>>> checks can be done as string comparisons since the >>>>>>>>>>>>> WebCore::SecurityOrigin::toString() method canonicalizes it. If, >>>>>>>>>>>>> in the >>>>>>>>>>>>> future, we need to do anything more with SecurityOrigins (besides >>>>>>>>>>>>> transporting them, testing equality, and using them in sets/maps) >>>>>>>>>>>>> then we >>>>>>>>>>>>> can make the class more complex. >>>>>>>>>>>>> >>>>>>>>>>>>> Why not use GURL? For one, the SecurityOrigin has a "null" >>>>>>>>>>>>> state which is significant and which isn't represented in GURL. >>>>>>>>>>>>> In >>>>>>>>>>>>> addition, there's a lot of operations you can do with a GURL >>>>>>>>>>>>> which don't >>>>>>>>>>>>> really make sense in the context of a SecurityOrigin. Passing >>>>>>>>>>>>> around a >>>>>>>>>>>>> SecurityOrigin object is also much more self-documenting. But, >>>>>>>>>>>>> the fact >>>>>>>>>>>>> that GURL looks like a tempting way to store a SecurityOrigin is >>>>>>>>>>>>> actually >>>>>>>>>>>>> one of the biggest reasons why I think we should make a dedicated >>>>>>>>>>>>> type. >>>>>>>>>>>>> >>>>>>>>>>>>> If people agree with this, my plan is to create such a type in >>>>>>>>>>>>> base and modify WebKit::WebSecurityOrigin to do conversions to >>>>>>>>>>>>> base::SecurityOrigin. I'll then convert everything over (or ask >>>>>>>>>>>>> people to >>>>>>>>>>>>> do the conversion if it looks scary). Finally, I'll remove >>>>>>>>>>>>> WebSecurityOrigin::toString(). >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> As I mentioned in person, I'm not happy having WebKit API depend >>>>>>>>>> on base for too many things. I would prefer to not introduce this >>>>>>>>>> dependency since it is a circular dependency (in the way the >>>>>>>>>> respective >>>>>>>>>> repositories relate). Circular dependencies are evil. We have them >>>>>>>>>> for >>>>>>>>>> string16 and NullableString16. Let's not add more. >>>>>>>>>> >>>>>>>>> >>>>>>>>> If we have one circular dependency on base, why not add more? >>>>>>>>> >>>>>>>> >>>>>>>> Because they can be a source of great pain. This is a slippery >>>>>>>> slope. We can basically never change base/string16.h or >>>>>>>> base/nullable_string16.h. I don't want more of that. Things like >>>>>>>> ChromiumBridge exist so we can avoid having more of these. >>>>>>>> >>>>>>> >>>>>> If we're making a DLL out of WebKit, then you're right. >>>>>> >>>>> >>>>> We are (for debug builds). That has always been the plan :-) >>>>> >>>>> But this is not the reason. >>>>> >>>>> >>>>> >>>>>> Every time we changed base, we'd need to take extra care to make >>>>>> sure base is rolled properly. >>>>>> >>>>> >>>>> What does rolling base mean? base is part of chromium. chromium >>>>> depends on webkit. See what I mean? base is not a separately versioned >>>>> module. >>>>> >>>>> >>>>> >>>>>> How are we going to provide developers such a DLL, though? If it's >>>>>> checked in, then whenever someone changes base they can check in a new >>>>>> copy >>>>>> of WebKit.dll. And, if we do things some other way, I'm sure we can find >>>>>> other reasonable solutions. >>>>>> >>>>>> >>>>>>> Anyhow, they're already #if'ed. So if someone wanted to use the >>>>>>>>> API without base, they easily could change that #else to a #elif, >>>>>>>>> right? >>>>>>>>> Maybe we should just do that now? >>>>>>>>> >>>>>>>> >>>>>>>> Right, that was my intent. They are currently defined when >>>>>>>> WEBKIT_IMPLEMENTATION is not defined, but we should probably make >>>>>>>> consumers >>>>>>>> opt-in by defining something explicit. >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>>> >>>>>>>>> I agree the circular dependencies are bad, but they're already >>>>>>>>> there. And, honestly, the WebKit API (in its current form) is not >>>>>>>>> useful >>>>>>>>> unless you are including base. >>>>>>>>> >>>>>>>> >>>>>>>> I disagree. >>>>>>>> >>>>>>> >>>>>> How would you use the WebKit API without base today? The only way is >>>>>> if you added #elif's to convert to some other set of primitives for URLs >>>>>> and >>>>>> strings, right? (That's why I qualified my statement with "in its >>>>>> current >>>>>> form".) >>>>>> >>>>> >>>>> android has no interest in using STL but this webkit api could be very >>>>> useful to them and other webkit consumers. the #else will change to >>>>> #elif, >>>>> i'm sure, in order to support such consumers. >>>>> >>>>> >>>>> >>>>>> >>>>>> >>>>>>> Whatsmore, if we output stuff as a string, then we're just hoping >>>>>>>>> someone goes ahead and immediately converts that to a SecurityOrigin. >>>>>>>>> But >>>>>>>>> there's no guarantee they won't. Or that they won't do >>>>>>>>> something incredibly stupid before such a conversion. By forcing >>>>>>>>> things to >>>>>>>>> go straight to a base::SecurityOrigin (and comments in that code >>>>>>>>> explaining >>>>>>>>> why) it'll be much harder for someone to do something dangerous >>>>>>>>> without >>>>>>>>> doing it willfully. >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> I think we should just do this: >>>>>>>> >>>>>>>> class SecurityOrigin { >>>>>>>> public: >>>>>>>> SecurityOrigin(const WebKit::WebSecurityOrigin& origin) : >>>>>>>> value_(origin.toString()) { >>>>>>>> } >>>>>>>> ... >>>>>>>> private: >>>>>>>> string16 value_; >>>>>>>> }; >>>>>>>> >>>>>>>> This way there is no way to construct a SecurityOrigin from a >>>>>>>> string. >>>>>>>> >>>>>>> >>>>>> There's nothing to make you (or even hint that you should) convert it >>>>>> from a string to a SecurityOrigin and then from a SecurityOrigin to a >>>>>> string >>>>>> before turning it into a WebSecurityOrigin. >>>>>> >>>>> >>>>> There is only a default constructor for WebSecurityOrigin. So far we >>>>> haven't needed to initialize a WebSecurityOrigin in chromium. WebCore >>>>> does >>>>> that for us. >>>>> >>>>> >>>>> >>>>>> In addition, you're going to be incurring 2 extra string >>>>>> copies every time. I think both of these are pretty compelling reasons >>>>>> against forcing everyone to convert things to strings and then to the >>>>>> type >>>>>> it should have been all along. I really don't think this will increase >>>>>> the maintenance burden _that_ much. >>>>>> >>>>> >>>>> The conversion cost seems minor. There would be a conversion cost to >>>>> SecurityOrigin no matter what since its members are not going to be >>>>> WebString. >>>>> >>>>> >>>>> >>>>>> >>>>>> >>>>>>> I think it solves >>>>>>>> most of the problems you are concerned with. Next, we just need to >>>>>>>> encourage people >>>>>>>> to use SecurityOrigin in Chrome whenever they need to refer to a >>>>>>>> security origin. >>>>>>>> >>>>>>>> Also, I think SecurityOrigin should be defined in webkit/glue since >>>>>>>> base/ should not >>>>>>>> depend on WebKit API, and SecurityOrigin is really too high level of >>>>>>>> a concept for >>>>>>>> base/. >>>>>>>> >>>>>>>> -Darin >>>>>>>> >>>>>>>> >>>>>>> Now that I think about it, I think we should change NullableString16 >>>>>>> to work this way too. >>>>>>> The only reason we have string16 in WebKit API is because we cannot >>>>>>> add ctors to >>>>>>> string16. >>>>>>> >>>>>> >>>>>> I've created a bug for this: >>>>>> http://code.google.com/p/chromium/issues/detail?id=24844 >>>>>> >>>>> >>>>> Thanks, >>>>> -Darin >>>>> >>>> >>>> >>> >> > --~--~---------~--~----~------------~-------~--~----~ Chromium Developers mailing list: chromium-dev@googlegroups.com View archives, change email options, or unsubscribe: http://groups.google.com/group/chromium-dev -~----------~----~----~----~------~----~------~--~---