On Wed, Apr 15, 2009 at 5:25 PM, Michael Nordman <micha...@chromium.org>wrote:
> > + chromium-dev <chromium-dev@googlegroups.com> > > On Tue, Apr 14, 2009 at 9:36 AM, Darin Fisher <da...@chromium.org> wrote: > > DOM Storage Overview > > LGTM > > > > LocalStorage > > "The exception is when a synchronous operation (synch XHR or alert() are > > examples) or when navigator.unlockStorage() is executed" <-- I think you > > should also say that the lock is released when calling into a plugin. I > > believe that issue was also discussed on the whatwg thread. > > "For localStorage, the BrowserProcess::db_thread will be unless a new > thread > > is absolutely necessary." <-- I agree that we should not need a new > thread. > > "This thread will receive and process all localStorage IPC messages." <-- > I > > assume you will intercept the IPC messages on the IO thread, and delegate > to > > the DB thread. This means that the IO thread is also involved in > receiving > > and processing localStorage IPC messages. > > "Luckily, each origin is completely isolated from the next, so we > > essentially must implement a per-origin lock for localStorage." <-- In > > discussing this with Ian Hickson, he was convinced that we would still > need > > a global lock to avoid dead-locks. I didn't fully understand the > dead-lock > > scenario he was concerned about, so it might be good to ask him about it. > > He said you could imagine a frame from origin A containing a frame from > > origin B. There may also be a frame from origin B containing a frame > from > > origin A in another process. If there was a way for script in the outer > > frame to synchronously block on execution of script in the inner frame, > then > > I guess you could get a dead-lock. I'm not sure how to construct that > > scenario though. I'm probably overlooking something... > > "How do we know when a process dies?" <-- See > > BrowserRenderProcessHost::OnChannelError. > > "Because responses may be deferred for some time, the message handler > will > > probably be IPC_MESSAGE_HANDLER_DELAY_REPLY. " <-- this is also necessary > in > > order to delegate IPC message processing to the DB thread. in other > words, > > you don't want to block the IO thread waiting for the DB thread. > > "When a render process asks to subscribe to storage events, that process > > will be added to the set for a particular origin." <-- it seems like this > > registration will happen asynchronously in chrome. there could be some > > interesting race conditions that cause you to either send a notification > > when one was not expected or miss a notification that would be sent by > > safari. what are your plans for this? maybe the races don't matter > since > > it is hard to predict (even in a single threaded browser like safari) > when > > another window will modify localStorage. > > It seems unfortunate to me that the spec requires a storage event to > carry a > > copy of the old and new values. Oh well :( > > "The render process will then need to run a nested message loop to > process > > messages. TODO: How will this work? We can probably do whatever set/get > > cookie does." <-- Yes, just use the existing synchronous IPC messaging > code > > that we use for cookies and many other things. This should be easy. > > "Other blocking operations like synchronous XHR operations and calling > > alert() should release the lock as well." <-- you should probably try to > > recognize these cases in chrome/renderer/ so that you can have a single > IPC > > for unlocking. > > StorageEvent: "These messages are synchronous and thus require a nested > > message loop." <-- why do they need to be synchronous? OK, I see that > you > > are addressing the race issue I mentioned before. I think we can > probably > > stick with asynchronous messages but keep a corresponding data structure > in > > the renderer that allows us to drop notifications that we should not > > dispatch. i don't think we benefit from using synchronous IPC here. > > "When you fire an event, will other windows see it? If not, no need for > the > > rest of this... When the event is dispatched, a synchronous message will > be > > sent to the browser process which will be redistributed to all render > > processes currently subscribed. A nested message loop will be run during > > the synchronous action. (Also synchronous for serialization purposes.)" > <-- > > I don't understand this. Since storage events originate in the browser, > why > > would the renderer need to send them back to the browser to be > > re-distributed? > > "Cleanup of WebKit's *Storage code" <-- It would be good to start the > > conversation early with folks from WebKit about how significantly > different > > our implementation of localStorage is. You should expect push-back > unless > > you can adequately justify why a separate implementation is required. I > > think your design is the right approach, so this should be an "easy" > > argument to make ;-) > > Please ask Brett Wilson to review your DB schema and operations. > > "Rejected alternative approaches" <-- i'm surprised that you don't > explain > > why you are not using the current webkit implementation perhaps with the > > same VFS approach that we are using for HTML5 database. the only thing > > missing there is a solution for storage events. > > the costs to having a separate implementation from apple is non-trivial. > > ideally you're solution here would be a refactoring of their code to > enable > > you to share some of their code. for example, i would expect that you > could > > share the code that interacts with sqlite. > > SessionStorage > > I like the idea of sharing code with LocalStorage here. I think we > cannot > > easily reuse the WebKit code because we need SessionStorage to be > > transferred between renderer processes: a single tab could use multiple > > renderer processes as navigations to new sites issued from the omnibox > > result in a process switch. > > If you use the same code as LocalStorage, you would just need to use an > > in-memory sqlite db, and have a different way of grouping the databases. > > The big downside to this approach in my mind is performance. Now you > have > > to go all the way to the browser process to access sessionStorage. > Safari's > > implementation will always be faster :( > > We may be able to address the performance difference with some > caching in the renderer. The 'truth' is stored in the browser process, > but an local copy of the session storage area is lazily populated on > reads and writes. On writes, store the value locally and signal events > as needed... and send an async ipc to have that stored in the browser > process too. On reads, check the local copy first, if present return > it, otherwise go to the browser process, cache the retreived value locally, > and > return it. > > The best of both worlds. > I actually tried to explain this in the "second cut" section of the optimizations section. Obviously I didn't do a very good job, so I made the text more clear (and fixed one typo). > > > If we try to keep sessionStorage in webkit, then we need to have a way to > > copy it out. That may actually be required if we want to support > persisting > > sessionStorage for the purposes of session restore. Hmm... > > -darin > > > > On Tue, Apr 7, 2009 at 9:12 PM, Jeremy Orlow <jor...@chromium.org> > wrote: > >> > >> After several chromium-dev and whatwg email threads, I think the major > >> issues with the spec and how to implement localStorage have been > hammered > >> out. I've written up my current thoughts in terms of a couple documents > >> (listed below). > >> This is my first major chunk of code in Chromium, so I've tried to be as > >> precise as possible. There are a couple of sections highlighted in > yellow > >> that are things I'm not sure about (and thus need to research more). If > I > >> say anything in the doc that seems suspect, please point it out! > >> I've made these writable for anyone with a chromium.org account, so > feel > >> free to make comments inline using the 'Insert > Comment' menu. I'll > either > >> incorporate the feedback into the doc or reply in this thread. > >> http://docs.google.com/Doc?id=dhs4g97m_0hjv3nqc7 - DOM Storage > Overview > >> http://docs.google.com/Doc?id=dhs4g97m_1v79p3wdd - LocalStorage > >> http://docs.google.com/Doc?id=dhs4g97m_2c2bvftf6 - SessionStorage > >> Thanks a lot! > >> Jeremy > >> > > > > > > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ Chromium Developers mailing list: chromium-dev@googlegroups.com View archives, change email options, or unsubscribe: http://groups.google.com/group/chromium-dev -~----------~----~----~----~------~----~------~--~---