[chromium-dev] Re: base::string16 / WebCore::String incompatibility

2009-07-13 Thread Brett Wilson

On Fri, Jul 10, 2009 at 5:04 PM, Jeremy Orlowjor...@chromium.org wrote:
 WebCore::String has the interesting property of differentiating between an
 empty string and a null string. In string16, however, there is no such thing
 as null.
 The LocalStorage implementation I'm working on proxies data between the
 rednerer processes and browser process. Some of this data is in the form of
 WebCore::Strings that need to differentiate between empty and null.
 I could add a boolean to all IPC messages where the string could be null and
 then add explicit checking (rather than using the elegant and implicit type
 conversions that normally happen from WebCore::String - WebKit::WebString
 - base::string16) but that seems pretty ugly. I think a better solution is
 adding a new type to base, adding serializing code to
 common/ipc_message_utils, and adding implicit type conversions between
 WebKit::WebString and this new type.
 First of all, is that a good idea? Second of all, what would be a good name
 for it? NullableString16?

What is happening with Darin's WebCore interface stuff. I remember he
was planning on having some kind of WebString that could be passed to
IPC. Is this still the case, and can we use that instead?

Brett

--~--~-~--~~~---~--~~
Chromium Developers mailing list: chromium-dev@googlegroups.com 
View archives, change email options, or unsubscribe: 
http://groups.google.com/group/chromium-dev
-~--~~~~--~~--~--~---



[chromium-dev] Re: base::string16 / WebCore::String incompatibility

2009-07-13 Thread Darin Fisher
On Mon, Jul 13, 2009 at 8:20 AM, Brett Wilson bre...@chromium.org wrote:

 On Fri, Jul 10, 2009 at 5:04 PM, Jeremy Orlowjor...@chromium.org wrote:
  WebCore::String has the interesting property of differentiating between
 an
  empty string and a null string. In string16, however, there is no such
 thing
  as null.
  The LocalStorage implementation I'm working on proxies data between the
  rednerer processes and browser process. Some of this data is in the form
 of
  WebCore::Strings that need to differentiate between empty and null.
  I could add a boolean to all IPC messages where the string could be null
 and
  then add explicit checking (rather than using the elegant and implicit
 type
  conversions that normally happen from WebCore::String -
 WebKit::WebString
  - base::string16) but that seems pretty ugly. I think a better solution
 is
  adding a new type to base, adding serializing code to
  common/ipc_message_utils, and adding implicit type conversions between
  WebKit::WebString and this new type.
  First of all, is that a good idea? Second of all, what would be a good
 name
  for it? NullableString16?

 What is happening with Darin's WebCore interface stuff. I remember he
 was planning on having some kind of WebString that could be passed to
 IPC. Is this still the case, and can we use that instead?

 Brett


WebString exists (has for many moons now).  It is just a wrapper for
StringImpl,
the same way WebCore::String is.  It is not threadsafe due to the reference
counting done for StringImpl.  That makes it a very bad candidate for
serializing
via Chrome IPC.  Someone might naively handle such an IPC on the IO thread,
and then PostTask the WebString to another thread.  We could try to solve
that
using assertions, but I decided instead to avoid serializing non-POD WebKit
API
types over Chrome IPC.

For reference:
http://src.chromium.org/viewvc/chrome/trunk/src/webkit/api/public/WebString.h?view=markup

-Darin

--~--~-~--~~~---~--~~
Chromium Developers mailing list: chromium-dev@googlegroups.com 
View archives, change email options, or unsubscribe: 
http://groups.google.com/group/chromium-dev
-~--~~~~--~~--~--~---



[chromium-dev] Re: base::string16 / WebCore::String incompatibility

2009-07-13 Thread Jeremy Orlow
On Mon, Jul 13, 2009 at 8:59 AM, Darin Fisher da...@chromium.org wrote:

 On Mon, Jul 13, 2009 at 8:20 AM, Brett Wilson bre...@chromium.org wrote:

 On Fri, Jul 10, 2009 at 5:04 PM, Jeremy Orlowjor...@chromium.org wrote:
  WebCore::String has the interesting property of differentiating between
 an
  empty string and a null string. In string16, however, there is no such
 thing
  as null.
  The LocalStorage implementation I'm working on proxies data between the
  rednerer processes and browser process. Some of this data is in the form
 of
  WebCore::Strings that need to differentiate between empty and null.
  I could add a boolean to all IPC messages where the string could be null
 and
  then add explicit checking (rather than using the elegant and implicit
 type
  conversions that normally happen from WebCore::String -
 WebKit::WebString
  - base::string16) but that seems pretty ugly. I think a better
 solution is
  adding a new type to base, adding serializing code to
  common/ipc_message_utils, and adding implicit type conversions between
  WebKit::WebString and this new type.
  First of all, is that a good idea? Second of all, what would be a good
 name
  for it? NullableString16?

 What is happening with Darin's WebCore interface stuff. I remember he
 was planning on having some kind of WebString that could be passed to
 IPC. Is this still the case, and can we use that instead?

 Brett


 WebString exists (has for many moons now).  It is just a wrapper for
 StringImpl,
 the same way WebCore::String is.  It is not threadsafe due to the reference
 counting done for StringImpl.  That makes it a very bad candidate for
 serializing
 via Chrome IPC.  Someone might naively handle such an IPC on the IO thread,
 and then PostTask the WebString to another thread.  We could try to solve
 that
 using assertions, but I decided instead to avoid serializing non-POD WebKit
 API
 types over Chrome IPC.

 For reference:

 http://src.chromium.org/viewvc/chrome/trunk/src/webkit/api/public/WebString.h?view=markup

 -Darin


I guess what I'm proposing is that we have a string data type that can be
safely passed across IPC but that has all the possible states a
WebCore::String does.  I believe adding the null state is the only thing
missing.

In my code, I've worked around this by passing a boolean along with the
string16 which states whether the string is null.  This will work, but since
AppCache, Database, and maybe others will soon be passing WebStrings through
the IPC layer to their backends in the browser process, I'd be surprised if
this doesn't come up again.

J

--~--~-~--~~~---~--~~
Chromium Developers mailing list: chromium-dev@googlegroups.com 
View archives, change email options, or unsubscribe: 
http://groups.google.com/group/chromium-dev
-~--~~~~--~~--~--~---



[chromium-dev] Re: base::string16 / WebCore::String incompatibility

2009-07-13 Thread Brett Wilson

On Mon, Jul 13, 2009 at 10:05 AM, Jeremy Orlowjor...@chromium.org wrote:
 On Mon, Jul 13, 2009 at 8:59 AM, Darin Fisher da...@chromium.org wrote:

 On Mon, Jul 13, 2009 at 8:20 AM, Brett Wilson bre...@chromium.org wrote:

 On Fri, Jul 10, 2009 at 5:04 PM, Jeremy Orlowjor...@chromium.org wrote:
  WebCore::String has the interesting property of differentiating between
  an
  empty string and a null string. In string16, however, there is no such
  thing
  as null.
  The LocalStorage implementation I'm working on proxies data between the
  rednerer processes and browser process. Some of this data is in the
  form of
  WebCore::Strings that need to differentiate between empty and null.
  I could add a boolean to all IPC messages where the string could be
  null and
  then add explicit checking (rather than using the elegant and implicit
  type
  conversions that normally happen from WebCore::String -
  WebKit::WebString
  - base::string16) but that seems pretty ugly. I think a better
  solution is
  adding a new type to base, adding serializing code to
  common/ipc_message_utils, and adding implicit type conversions between
  WebKit::WebString and this new type.
  First of all, is that a good idea? Second of all, what would be a good
  name
  for it? NullableString16?

 What is happening with Darin's WebCore interface stuff. I remember he
 was planning on having some kind of WebString that could be passed to
 IPC. Is this still the case, and can we use that instead?

 Brett

 WebString exists (has for many moons now).  It is just a wrapper for
 StringImpl,
 the same way WebCore::String is.  It is not threadsafe due to the
 reference
 counting done for StringImpl.  That makes it a very bad candidate for
 serializing
 via Chrome IPC.  Someone might naively handle such an IPC on the IO
 thread,
 and then PostTask the WebString to another thread.  We could try to solve
 that
 using assertions, but I decided instead to avoid serializing non-POD
 WebKit API
 types over Chrome IPC.
 For reference:

 http://src.chromium.org/viewvc/chrome/trunk/src/webkit/api/public/WebString.h?view=markup
 -Darin

 I guess what I'm proposing is that we have a string data type that can be
 safely passed across IPC but that has all the possible states a
 WebCore::String does.  I believe adding the null state is the only thing
 missing.
 In my code, I've worked around this by passing a boolean along with the
 string16 which states whether the string is null.  This will work, but since
 AppCache, Database, and maybe others will soon be passing WebStrings through
 the IPC layer to their backends in the browser process, I'd be surprised if
 this doesn't come up again.

Yes, I think NullableString16 is better than passing a separate bool.

Brett

--~--~-~--~~~---~--~~
Chromium Developers mailing list: chromium-dev@googlegroups.com 
View archives, change email options, or unsubscribe: 
http://groups.google.com/group/chromium-dev
-~--~~~~--~~--~--~---



[chromium-dev] Re: base::string16 / WebCore::String incompatibility

2009-07-13 Thread Jeremy Orlow
On Mon, Jul 13, 2009 at 10:08 AM, Brett Wilson bre...@chromium.org wrote:


 On Mon, Jul 13, 2009 at 10:05 AM, Jeremy Orlowjor...@chromium.org wrote:
  On Mon, Jul 13, 2009 at 8:59 AM, Darin Fisher da...@chromium.org
 wrote:
 
  On Mon, Jul 13, 2009 at 8:20 AM, Brett Wilson bre...@chromium.org
 wrote:
 
  On Fri, Jul 10, 2009 at 5:04 PM, Jeremy Orlowjor...@chromium.org
 wrote:
   WebCore::String has the interesting property of differentiating
 between
   an
   empty string and a null string. In string16, however, there is no
 such
   thing
   as null.
   The LocalStorage implementation I'm working on proxies data between
 the
   rednerer processes and browser process. Some of this data is in the
   form of
   WebCore::Strings that need to differentiate between empty and null.
   I could add a boolean to all IPC messages where the string could be
   null and
   then add explicit checking (rather than using the elegant and
 implicit
   type
   conversions that normally happen from WebCore::String -
   WebKit::WebString
   - base::string16) but that seems pretty ugly. I think a better
   solution is
   adding a new type to base, adding serializing code to
   common/ipc_message_utils, and adding implicit type conversions
 between
   WebKit::WebString and this new type.
   First of all, is that a good idea? Second of all, what would be a
 good
   name
   for it? NullableString16?
 
  What is happening with Darin's WebCore interface stuff. I remember he
  was planning on having some kind of WebString that could be passed to
  IPC. Is this still the case, and can we use that instead?
 
  Brett
 
  WebString exists (has for many moons now).  It is just a wrapper for
  StringImpl,
  the same way WebCore::String is.  It is not threadsafe due to the
  reference
  counting done for StringImpl.  That makes it a very bad candidate for
  serializing
  via Chrome IPC.  Someone might naively handle such an IPC on the IO
  thread,
  and then PostTask the WebString to another thread.  We could try to
 solve
  that
  using assertions, but I decided instead to avoid serializing non-POD
  WebKit API
  types over Chrome IPC.
  For reference:
 
 
 http://src.chromium.org/viewvc/chrome/trunk/src/webkit/api/public/WebString.h?view=markup
  -Darin
 
  I guess what I'm proposing is that we have a string data type that can be
  safely passed across IPC but that has all the possible states a
  WebCore::String does.  I believe adding the null state is the only thing
  missing.
  In my code, I've worked around this by passing a boolean along with the
  string16 which states whether the string is null.  This will work, but
 since
  AppCache, Database, and maybe others will soon be passing WebStrings
 through
  the IPC layer to their backends in the browser process, I'd
 be surprised if
  this doesn't come up again.

 Yes, I think NullableString16 is better than passing a separate bool.


Can anyone think of a better name for it?

--~--~-~--~~~---~--~~
Chromium Developers mailing list: chromium-dev@googlegroups.com 
View archives, change email options, or unsubscribe: 
http://groups.google.com/group/chromium-dev
-~--~~~~--~~--~--~---



[chromium-dev] Re: base::string16 / WebCore::String incompatibility

2009-07-13 Thread Scott Hess

On Mon, Jul 13, 2009 at 10:10 AM, Jeremy Orlowjor...@chromium.org wrote:
 On Mon, Jul 13, 2009 at 10:08 AM, Brett Wilson bre...@chromium.org wrote:
 Yes, I think NullableString16 is better than passing a separate bool.

 Can anyone think of a better name for it?

What's wrong with NullableString16?  Writing string code which assumes
the input is non-NULL is a really common source of bugs.  We shouldn't
encourage people to pass null-capable fields unless the API really
really does want actual null-capable fields.  This isn't something you
can address generally by encapsulating it in the wrapper, because the
NULL has meaning (it IS a separate bool, regardless of how you dress
it up).

-scott

--~--~-~--~~~---~--~~
Chromium Developers mailing list: chromium-dev@googlegroups.com 
View archives, change email options, or unsubscribe: 
http://groups.google.com/group/chromium-dev
-~--~~~~--~~--~--~---



[chromium-dev] Re: base::string16 / WebCore::String incompatibility

2009-07-13 Thread Jeremy Orlow
All right.  NullableString16 it is.  :-)
And, in case it's not clear, this will only be for strings that have a valid
null state.  The common case should still be using string16.

J

On Mon, Jul 13, 2009 at 10:23 AM, Scott Hess sh...@chromium.org wrote:

 On Mon, Jul 13, 2009 at 10:10 AM, Jeremy Orlowjor...@chromium.org wrote:
  On Mon, Jul 13, 2009 at 10:08 AM, Brett Wilson bre...@chromium.org
 wrote:
  Yes, I think NullableString16 is better than passing a separate bool.
 
  Can anyone think of a better name for it?

 What's wrong with NullableString16?  Writing string code which assumes
 the input is non-NULL is a really common source of bugs.  We shouldn't
 encourage people to pass null-capable fields unless the API really
 really does want actual null-capable fields.  This isn't something you
 can address generally by encapsulating it in the wrapper, because the
 NULL has meaning (it IS a separate bool, regardless of how you dress
 it up).

 -scott


--~--~-~--~~~---~--~~
Chromium Developers mailing list: chromium-dev@googlegroups.com 
View archives, change email options, or unsubscribe: 
http://groups.google.com/group/chromium-dev
-~--~~~~--~~--~--~---



[chromium-dev] Re: base::string16 / WebCore::String incompatibility

2009-07-13 Thread Darin Fisher
On Mon, Jul 13, 2009 at 12:29 PM, Jeremy Orlow jor...@chromium.org wrote:

 On Mon, Jul 13, 2009 at 12:20 PM, David Levin le...@google.com wrote:




 On Mon, Jul 13, 2009 at 8:59 AM, Darin Fisher da...@chromium.org wrote:


 WebString exists (has for many moons now).  It is just a wrapper for
 StringImpl,
 the same way WebCore::String is.  It is not threadsafe due to the
 reference
 counting done for StringImpl.


 fwiw, I've checked in all the mechanics to do cheaply use StringImpl's
 across threads.

 You have to call a method (to be named) and then you'll get back a new
 StringImpl which uses the *same underlying buffer *and can be passed to
 another thread. (Right now, webkit code calls StringImpl::copy() for this
 purpose but that allocates a new buffer and copies the contents there. I
 can't modify that method due to the fact that it is currently a threadsafe
 call and that is relied on in some places in webkit.)

 Let me know if you want/need more details about it.

 Dave


 Would it be better to revisit allowing WebStrings to be transported across
 the IPC barrier (with this new code) or should we go the NullableString16
 route?  I'm now leaning towards the latter because the common case is that
 we _don't_ want to allow null strings.  Also it will be similar to string16,
 so it should be more familiar to Chromium developers.  Wrapping WebStrings
 might be a bit faster though, since it won't require an additional string
 copy from string16 to and from StringImpl.



Hmm...

I'd probably go with NullableString16.  If we find the copy overhead to
matter, then we could always optimize later.

Another issue:  Do we want to add conversion methods on WebString?  My first
reaction is to try to avoid it...

-Darin

--~--~-~--~~~---~--~~
Chromium Developers mailing list: chromium-dev@googlegroups.com 
View archives, change email options, or unsubscribe: 
http://groups.google.com/group/chromium-dev
-~--~~~~--~~--~--~---



[chromium-dev] Re: base::string16 / WebCore::String incompatibility

2009-07-13 Thread Jeremy Orlow
On Mon, Jul 13, 2009 at 12:54 PM, Darin Fisher da...@chromium.org wrote:

 On Mon, Jul 13, 2009 at 12:29 PM, Jeremy Orlow jor...@chromium.orgwrote:

 On Mon, Jul 13, 2009 at 12:20 PM, David Levin le...@google.com wrote:




 On Mon, Jul 13, 2009 at 8:59 AM, Darin Fisher da...@chromium.orgwrote:


 WebString exists (has for many moons now).  It is just a wrapper for
 StringImpl,
 the same way WebCore::String is.  It is not threadsafe due to the
 reference
 counting done for StringImpl.


 fwiw, I've checked in all the mechanics to do cheaply use StringImpl's
 across threads.

 You have to call a method (to be named) and then you'll get back a new
 StringImpl which uses the *same underlying buffer *and can be passed to
 another thread. (Right now, webkit code calls StringImpl::copy() for this
 purpose but that allocates a new buffer and copies the contents there. I
 can't modify that method due to the fact that it is currently a threadsafe
 call and that is relied on in some places in webkit.)

 Let me know if you want/need more details about it.

 Dave


 Would it be better to revisit allowing WebStrings to be transported across
 the IPC barrier (with this new code) or should we go the NullableString16
 route?  I'm now leaning towards the latter because the common case is that
 we _don't_ want to allow null strings.  Also it will be similar to string16,
 so it should be more familiar to Chromium developers.  Wrapping WebStrings
 might be a bit faster though, since it won't require an additional string
 copy from string16 to and from StringImpl.



 Hmm...

 I'd probably go with NullableString16.  If we find the copy overhead to
 matter, then we could always optimize later.

 Another issue:  Do we want to add conversion methods on WebString?  My
 first reaction is to try to avoid it...


Hm.  I actually thought we should have implicit conversion methods like we
do for string16.  What's the problem with doing so besides a little bit of
bloat?

If we're not doing implicit conversion, I'm actually not sure if there's a
point to adding NullableString16's since the code will be equally ugly as
explicitly having a boolean.

J

--~--~-~--~~~---~--~~
Chromium Developers mailing list: chromium-dev@googlegroups.com 
View archives, change email options, or unsubscribe: 
http://groups.google.com/group/chromium-dev
-~--~~~~--~~--~--~---



[chromium-dev] Re: base::string16 / WebCore::String incompatibility

2009-07-13 Thread Darin Fisher
On Mon, Jul 13, 2009 at 12:59 PM, Jeremy Orlow jor...@chromium.org wrote:

 On Mon, Jul 13, 2009 at 12:54 PM, Darin Fisher da...@chromium.org wrote:

 On Mon, Jul 13, 2009 at 12:29 PM, Jeremy Orlow jor...@chromium.orgwrote:

 On Mon, Jul 13, 2009 at 12:20 PM, David Levin le...@google.com wrote:




 On Mon, Jul 13, 2009 at 8:59 AM, Darin Fisher da...@chromium.orgwrote:


 WebString exists (has for many moons now).  It is just a wrapper for
 StringImpl,
 the same way WebCore::String is.  It is not threadsafe due to the
 reference
 counting done for StringImpl.


 fwiw, I've checked in all the mechanics to do cheaply use StringImpl's
 across threads.

 You have to call a method (to be named) and then you'll get back a new
 StringImpl which uses the *same underlying buffer *and can be passed to
 another thread. (Right now, webkit code calls StringImpl::copy() for this
 purpose but that allocates a new buffer and copies the contents there. I
 can't modify that method due to the fact that it is currently a threadsafe
 call and that is relied on in some places in webkit.)

 Let me know if you want/need more details about it.

 Dave


 Would it be better to revisit allowing WebStrings to be transported
 across the IPC barrier (with this new code) or should we go the
 NullableString16 route?  I'm now leaning towards the latter because the
 common case is that we _don't_ want to allow null strings.  Also it will be
 similar to string16, so it should be more familiar to Chromium developers.
  Wrapping WebStrings might be a bit faster though, since it won't require an
 additional string copy from string16 to and from StringImpl.



 Hmm...

 I'd probably go with NullableString16.  If we find the copy overhead to
 matter, then we could always optimize later.

 Another issue:  Do we want to add conversion methods on WebString?  My
 first reaction is to try to avoid it...


 Hm.  I actually thought we should have implicit conversion methods like we
 do for string16.  What's the problem with doing so besides a little bit of
 bloat?

 If we're not doing implicit conversion, I'm actually not sure if there's a
 point to adding NullableString16's since the code will be equally ugly as
 explicitly having a boolean.

 J



Yeah, that's a good point.  Implicit conversion methods it is then.
-Darin

--~--~-~--~~~---~--~~
Chromium Developers mailing list: chromium-dev@googlegroups.com 
View archives, change email options, or unsubscribe: 
http://groups.google.com/group/chromium-dev
-~--~~~~--~~--~--~---