summaryrefslogtreecommitdiffstats
path: root/chrome/browser/tabs
Commit message (Collapse)AuthorAgeFilesLines
* Any time we are shutting down a tab, try to use fast shutdown.estade@chromium.org2009-10-023-48/+160
| | | | | | | | | BUG=http://crbug.com/5638 TEST=existing tab strip model tests, Fast shutdown ui tests, new tab strip model fast shutdown test Review URL: http://codereview.chromium.org/235050 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@27865 0039d316-1c4b-4281-b951-d872f2087c98
* Fix deadlock when plugin puts an alert and right afterwards the browser ↵jam@chromium.org2009-09-281-2/+2
| | | | | | | | | | process makes a win32 call that ends up waiting on the plugin. Since the plugin thread is blocked, the Windows message doesn't get dispatched and the browser ui thread deadlocks. The message from the renderer would make the plugin run a nested message loop but it doesn't get run on the browser ui thread since it's blocked. The fix is to set the event that runs nested message loop in the renderer process. BUG=23147 TEST=ui tests already cover nested message loops and plugins. This particular scenario is hard to write a test case for because it's a race condition involving the browser. Review URL: http://codereview.chromium.org/243018 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@27421 0039d316-1c4b-4281-b951-d872f2087c98
* Allow the initial size of TabContentViews to be based on thetony@chromium.org2009-09-251-2/+2
| | | | | | | | | | | | | | | | size of another TabContents by having an optional TabContents* passed into the TabContents ctor. This fixes a race condition where it's possible for a web page to load before getting the sizing information from the browser. The new flow passes the size information to the renderer process before passing the URL to load. BUG=20159 Review URL: http://codereview.chromium.org/201130 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@27199 0039d316-1c4b-4281-b951-d872f2087c98
* Add keyboard shortcuts to reorder tabs left or right on Linux.tony@chromium.org2009-09-142-0/+14
| | | | | | | | | | | | | | | It's standard in GTK+ for tabbed interfaces to be reorderable using ctrl+shift+pgup and ctrl+shift+pgdn (e.g., in Terminal). The plumbing is included on all platforms, but the shortcut is only hooked up on Linux. BUG=21594 Review URL: http://codereview.chromium.org/194088 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@26125 0039d316-1c4b-4281-b951-d872f2087c98
* Fix my change to flashing tabcpu@chromium.org2009-09-101-2/+1
| | | | | | | | | | | | | - I commited the last experiment, not what I meant to commit, sorry. TBR=darin BUG=21481 TEST=see bug Review URL: http://codereview.chromium.org/193076 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25911 0039d316-1c4b-4281-b951-d872f2087c98
* Fix for the flashing of the front tab.cpu@chromium.org2009-09-091-1/+7
| | | | | | | | | | | | | | | - The background tabs think they are visible causing paints to be executed. These steal the backing store from the visible tab Please read the bug for more info. BUG=20831 TEST= see bug for steps Review URL: http://codereview.chromium.org/199010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25739 0039d316-1c4b-4281-b951-d872f2087c98
* Revert "Fix a ton of compiler warnings."tony@chromium.org2009-08-281-16/+10
| | | | | | | | | | | This reverts commit r24792. TBR=estade Review URL: http://codereview.chromium.org/179028 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@24796 0039d316-1c4b-4281-b951-d872f2087c98
* Fix a ton of compiler warnings.estade@chromium.org2009-08-281-10/+16
| | | | | | | | | | | | | | | Most of these are classes with virtual methods lacking virtual destructors or NULL used in non-pointer context. BUG=none TEST=app_unittests && base_unittests --gtest_filter=-ConditionVariableTest.LargeFastTaskTest patch by Jacob Mandelson <jlmjlm [at] gmail> http://codereview.chromium.org/171028/show git-svn-id: svn://svn.chromium.org/chrome/trunk/src@24792 0039d316-1c4b-4281-b951-d872f2087c98
* Cleaning up lines longer than 80 chars under src/chrome/browser. mark@chromium.org2009-08-171-4/+6
| | | | | | | | | | | | | | | | | | | Command: awk '{if ( length($0) > 80 ) { print FILENAME, FNR, $0 } }' *.cc *.h # recursive find . -type f \( -name '*.cc' -o -name '*.h' \) -exec awk '{if ( length($0) > 80 ) { print FILENAME, FNR, $0 } }' {} \; Patch by Pierre-Antoine LaFayette <pierre.lafayette@gmail.com> BUG=None TEST=None Code review URL: http://codereview.chromium.org/164566 Review URL: http://codereview.chromium.org/171066 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@23583 0039d316-1c4b-4281-b951-d872f2087c98
* Reland r23358 with a fix for linux unit_tests:tony@chromium.org2009-08-131-0/+14
| | | | | | | | | | | | | | | | | | Better location for setting the size of tab contents. This should catch all code paths. I noticed that middle clicking a bookmark wasn't working, so I found a single place to do this. This code is always run when a tab is added and it sizes the contents when it's loading in the background. BUG=619 TBR=japhet Review URL: http://codereview.chromium.org/164526 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@23384 0039d316-1c4b-4281-b951-d872f2087c98
* Revert "Better location for setting the size of tab contents. This should"tony@chromium.org2009-08-131-14/+0
| | | | | | | | | | | This reverts commit r23358. TBR=japhet Review URL: http://codereview.chromium.org/165489 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@23365 0039d316-1c4b-4281-b951-d872f2087c98
* Better location for setting the size of tab contents. This shouldtony@chromium.org2009-08-131-0/+14
| | | | | | | | | | | | | | | catch all code paths. I noticed that middle clicking a bookmark wasn't working, so I found a single place to do this. This code is always run when a tab is added and it sizes the contents when it's loading in the background. BUG=619 Review URL: http://codereview.chromium.org/165473 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@23358 0039d316-1c4b-4281-b951-d872f2087c98
* Wires up restoring pinned tabs for session and tab restoresky@chromium.org2009-07-142-14/+0
| | | | | | | | | | | services. And turns on pinned tabs by default on linux. BUG=16634 TEST=Currently this linux only. Try tab pinning and make sure it works. Review URL: http://codereview.chromium.org/149621 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20650 0039d316-1c4b-4281-b951-d872f2087c98
* Nukes the 3 arg TabMoved variant in favor of the 4 arg variant.sky@chromium.org2009-07-131-9/+1
| | | | | | | | | BUG=16634 TEST=none Review URL: http://codereview.chromium.org/155441 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20581 0039d316-1c4b-4281-b951-d872f2087c98
* Adds tab pinning to TabStripModel. This is just the model side ofsky@chromium.org2009-07-084-42/+429
| | | | | | | | | | | | | | | | | | | things (and tests), no UI yet. The model enforces that all pinned tabs occur at the beginning of the model. For example, if there are no pinned tabs and you pin the 10th tab, it is moved to the front of the tab strip. Similarly inserting a tab before the last pinned tab implicitly pins it. Moving a pinned tab beyond the set of pinned tabs implicitly unpins it. I'll file a bug on this when the site allows me to. BUG=none TEST=none Review URL: http://codereview.chromium.org/155228 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20181 0039d316-1c4b-4281-b951-d872f2087c98
* Basics of a new TabStrip.It's very, very rough, but I wanted to check it in ↵ben@chromium.org2009-07-072-0/+14
| | | | | | | | so I don't have to keep typing svn pset as I pass patches back and forth between machines.Behind a command line flag --enable-tabtastic2.I'm trying to split the TabContents specific stuff off of the TabStrip so it's more generic (and more easily mocked for unit testing of various layout conditions). Hence TabStrip vs. BrowserTabStrip. TabStrip may move into views/ once this process is complete.Animator is a utility that can be associated with a View that (at this point) animates that View's bounds from wherever it is now to somewhere else. The TabStrip uses this to do animations for individual Tabs that are independent of each other - a limitation of the old TabStrip is that only one animation is ever active at a time so its animations are a little jumpy compared to other products.Also, detached tab dragging shows the live contents, with all animations/video/etc.Like I said, this is really rough, but I didn't want it to grow any bigger. I will write up a design doc later.http://crbug.com/9032TEST=TBD... will finally be doing some for TabStrip layout! Review URL: http://codereview.chromium.org/42490 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20053 0039d316-1c4b-4281-b951-d872f2087c98
* Do some refactoring of renderer_host.brettw@chromium.org2009-07-061-1/+1
| | | | | | | | | | | | | | | | | | | This removes the last dependency on tab_contents from the renderer_host code and into the RenderViewHostDelegate. Some of the tests depended on tab_contents, so I moved to a new directory with the tab_contents include allowed via DEPS. Now DEPS can enforce that no additional tab_contents includes are added to renderer_host. RenderViewHost delegate is now pure virtual. After spending a while *again* figuring out why my code didn't work, only to find it was because the default implementation of a function was getting called instead of the real one, I decided to make this pure virtual. It is implemented by TabContents, which implements basically everything, and two other places that implement less. Only two lists of duplicate functions seems not too bad, although long-term it would be nice if this delegate was somehow more succinct. Review URL: http://codereview.chromium.org/155071 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19982 0039d316-1c4b-4281-b951-d872f2087c98
* Make sure tabs open on the left like normal.brettw@chromium.org2009-07-011-4/+0
| | | | | | Review URL: http://codereview.chromium.org/151117 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19733 0039d316-1c4b-4281-b951-d872f2087c98
* Implement the default tab opening behavior. Fix some linux build issues by ↵brettw@chromium.org2009-06-151-0/+5
| | | | | | | | adding missing includes. Review URL: http://codereview.chromium.org/125145 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18444 0039d316-1c4b-4281-b951-d872f2087c98
* Refactor the titlebar code into its own class because it's getting bigtc@google.com2009-06-121-1/+0
| | | | | | | | | | | | | | | and cluttering up browser_window_gtk. Fix a small painting bug when a menu is drawn over the titlebar background. Also move the tab strip context menu into the titlebar background container by adding an event box. Now the context menu appears e.g., below the min/max/close buttons or above the tab strip. Review URL: http://codereview.chromium.org/125078 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18328 0039d316-1c4b-4281-b951-d872f2087c98
* Fix mac build.tc@google.com2009-06-021-1/+0
| | | | | | | | | TBR=erg Review URL: http://codereview.chromium.org/114068 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17426 0039d316-1c4b-4281-b951-d872f2087c98
* Port 2 more unittests to linux/mac. Just some small compiler warnings.tc@google.com2009-06-021-5/+3
| | | | | | | | | This ports find_backend_unittest.cc and tab_strip_model_unittest.cc. Review URL: http://codereview.chromium.org/119055 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17424 0039d316-1c4b-4281-b951-d872f2087c98
* Add a context menu to the tab strip. It appears when you click in thetc@google.com2009-06-021-0/+1
| | | | | | | | | tab strip background. Review URL: http://codereview.chromium.org/119020 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17415 0039d316-1c4b-4281-b951-d872f2087c98
* Revert the Omnibox when changing tabs while its contents have been deleted.pkasting@chromium.org2009-05-292-1/+11
| | | | | | | | | To do this, I needed to add a new TabStripModelObserver call that fired before the tab had been changed, since when the Omnibox asks for the current permanent_text_ it gets it from the selected tab's navigation controller. BUG=6850 Review URL: http://codereview.chromium.org/113983 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17241 0039d316-1c4b-4281-b951-d872f2087c98
* Reverting 15399.maruel@chromium.org2009-05-064-1/+18
| | | | | | | broke purify Review URL: http://codereview.chromium.org/115026 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15409 0039d316-1c4b-4281-b951-d872f2087c98
* Change Browser::GetIndexOfController to GetIndexOfTabContents. Now that webrettw@chromium.org2009-05-064-18/+1
| | | | | | | | don't have tab contents switching, identifying tabs by their controller is weird, so we should gradually move to only using TabContents*. Review URL: http://codereview.chromium.org/115018 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15399 0039d316-1c4b-4281-b951-d872f2087c98
* honor index in createTab()rafaelw@chromium.org2009-05-063-48/+65
| | | | | | | | | BUG=11200 R=brettw,beng Review URL: http://codereview.chromium.org/99300 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15392 0039d316-1c4b-4281-b951-d872f2087c98
* Move scoped_vector.h and stl_util-inl.h to base/ben@chromium.org2009-05-052-2/+2
| | | | | | | | http://crbug.com/11387 Review URL: http://codereview.chromium.org/107001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15272 0039d316-1c4b-4281-b951-d872f2087c98
* Fix a regression that the sad tab favicon is not displayed when a tab crashes.brettw@chromium.org2009-05-041-1/+3
| | | | | | | | | | | | | | This regressed in my favicon/title updating change because the crashed state is not updated on the codepath, since it comes from the tab. The other approach would have been to make this call through the "update everything" codepath for tbe state changing, but that's executed on a timer, and it's nice to show the tab crash right away since the check is very inexpensive. BUG=http://crbug.com/10756 Review URL: http://codereview.chromium.org/99341 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15201 0039d316-1c4b-4281-b951-d872f2087c98
* Replace all occurrances of WebContents with TabContents.brettw@chromium.org2009-05-042-4/+4
| | | | | | Review URL: http://codereview.chromium.org/99177 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15194 0039d316-1c4b-4281-b951-d872f2087c98
* Relanding this, it was missing the Mac unit-test change, that was breaking ↵jcampan@chromium.org2009-04-303-8/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | the build. TBR=ben Closing the last tab with a download in-progress would cause the tab to be closed and become unusable if the user decides not to proceed with the browser shutdown. This is because we check for in-progress downloads when the browser is closed, and the tab is closed before that, leaving the tab-strip in a bad state. This CL ensures we also bring-up the confirmation dialog when the last tab is closed. BUG=10680 TEST=Start downloading a big file. While the file is downloading, close all tabs. When closing the last tab, the in-progress download dialog should be shown. Select the 'Wait for downloads', the download tab should be shown and the previous tab should still be displayed and functional. Close all tabs again, this time select the 'Close and cancel downloads' option, the browser should be closed. Review URL: http://codereview.chromium.org/100210 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14952 0039d316-1c4b-4281-b951-d872f2087c98
* Reverting 14948.jcampan@chromium.org2009-04-303-29/+8
| | | | | | | | | Broke the Mac build. TBR=ben Review URL: http://codereview.chromium.org/99224 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14949 0039d316-1c4b-4281-b951-d872f2087c98
* Closing the last tab with a download in-progress would cause the tab to bejcampan@chromium.org2009-04-303-8/+29
| | | | | | | | | | | | | | | | | | | | | | | closed and become unusable if the user decides not to proceed with the browser shutdown. This is because we check for in-progress downloads when the browser is closed, and the tab is closed before that, leaving the tab-strip in a bad state. This CL ensures we also bring-up the confirmation dialog when the last tab is closed. BUG=10680 TEST=Start downloading a big file. While the file is downloading, close all tabs. When closing the last tab, the in-progress download dialog should be shown. Select the 'Wait for downloads', the download tab should be shown and the previous tab should still be displayed and functional. Close all tabs again, this time select the 'Close and cancel downloads' option, the browser should be closed. Review URL: http://codereview.chromium.org/99195 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14948 0039d316-1c4b-4281-b951-d872f2087c98
* Searching by keyword now generates a visit against the site with asky@chromium.org2009-04-271-0/+1
| | | | | | | | | | | | | | | | transition type of TAB_TO_SEARCH. This visit increments the typed count and ensures if you use TAB_TO_SEARCH you still get autocompleted to the site. I'll add some tests for this, but want to make sure we're ok with it before I do that. BUG=3633 TEST=will be covered by unit tests. Review URL: http://codereview.chromium.org/93087 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14609 0039d316-1c4b-4281-b951-d872f2087c98
* Re-land my change to clean up TabContents/WebContents ownership. Thisbrettw@chromium.org2009-04-203-33/+29
| | | | | | | | | | | | | | | | | | | | | | | | is the same except in tab_strip_model_unittest I fixed a leak by making a WebContents on the stack, I added a factory to the SiteInstance unittest to prevent another leak, and I re-added a NULL set to the external_tab_container. Fix the ownership model of TabContents and NavigationController. Previously the NavigationController owned the TabContents, and there were extra steps required at creation and destruction to clean everything up properly. NavigationController is now a member of TabContents, and there is no setup or tear down necessary other than the constructor and destructor. I could remove the tab contents creation in the NavigationController, as well as all the weird destruction code in WebContents which got moved to the destructor. I made the controller getter return a reference since the ownership is clear and there is no possibility of NULL. This required changing a lot of tiles, but many of them were simplified since they no longer have to NULL check. Previous review URL: http://codereview.chromium.org/69043 Review URL: http://codereview.chromium.org/67294 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14053 0039d316-1c4b-4281-b951-d872f2087c98
* Reverting 14005.brettw@chromium.org2009-04-183-27/+31
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14006 0039d316-1c4b-4281-b951-d872f2087c98
* Fix the ownership model of TabContents and NavigationController. Previously thebrettw@chromium.org2009-04-183-31/+27
| | | | | | | | | | | | | | | | | NavigationController owned the TabContents, and there were extra steps required at creation and destruction to clean everything up properly. NavigationController is now a member of TabContents, and there is no setup or tear down necessary other than the constructor and destructor. I could remove the tab contents creation in the NavigationController, as well as all the weird destruction code in WebContents which got moved to the destructor. I made the controller getter return a reference since the ownership is clear and there is no possibility of NULL. This required changing a lot of tiles, but many of them were simplified since they no longer have to NULL check. Review URL: http://codereview.chromium.org/69043 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14005 0039d316-1c4b-4281-b951-d872f2087c98
* Due to some crashes in teardown, change NotificationObserversmbelshe@google.com2009-04-172-5/+5
| | | | | | | | | | for TAB_CONTENTS_DESTROYED to use the NotificationRegistrar to ensure proper cleanup. Review URL: http://codereview.chromium.org/79051 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13970 0039d316-1c4b-4281-b951-d872f2087c98
* ad an argument to MoveTabContentsAt() that switches whether the moved tab is ↵rafaelw@chromium.org2009-04-163-5/+30
| | | | | | | | set as the selected tab, or if the selected tab is left selected (but possibly moved). Review URL: http://codereview.chromium.org/63153 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13823 0039d316-1c4b-4281-b951-d872f2087c98
* Remove TabContnetsType from everywhere.brettw@chromium.org2009-04-153-68/+13
| | | | | | | | I also removed the notion of the "active" tab contents since there is only one per tab now, and all the messages to replace them. Review URL: http://codereview.chromium.org/67173 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13808 0039d316-1c4b-4281-b951-d872f2087c98
* Remove TabContentsType from the NavigationController external interface and inbrettw@chromium.org2009-04-151-2/+2
| | | | | | | some related areas. I removed all uses of this in the previous patch. Review URL: http://codereview.chromium.org/73057 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13730 0039d316-1c4b-4281-b951-d872f2087c98
* Added undo tab closing item to Tab menu.idanan@chromium.org2009-04-143-0/+17
| | | | | | Review URL: http://codereview.chromium.org/62151 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13662 0039d316-1c4b-4281-b951-d872f2087c98
* Re-land popup routing fix for browser.ben@chromium.org2009-04-073-33/+7
| | | | | | | | | | Just the bugfix + test now. Test is disabled pending a working framework. http://crbug.com/8472 Review URL: http://codereview.chromium.org/59007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13282 0039d316-1c4b-4281-b951-d872f2087c98
* Clarify the documentation for loading_only on TabRenderer::UpdateData.brettw@chromium.org2009-04-071-0/+13
| | | | | | Review URL: http://codereview.chromium.org/63029 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13256 0039d316-1c4b-4281-b951-d872f2087c98
* Make the RenderViewHostFactory a global. This prevents us from having to passbrettw@chromium.org2009-04-071-1/+1
| | | | | | | | | a factory pointer around all the time. Removing TestTabContents will require making the Browser object keep track of the Factory pointer as well, so I think the global is the best approach and cleans some things up. Review URL: http://codereview.chromium.org/62044 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13255 0039d316-1c4b-4281-b951-d872f2087c98
* Remove more reliance on tab contents types.brettw@chromium.org2009-04-051-116/+32
| | | | | | Review URL: http://codereview.chromium.org/62041 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13135 0039d316-1c4b-4281-b951-d872f2087c98
* Make the throbber throb sooner after you navigate. This fixes the new tab page,brettw@chromium.org2009-04-043-8/+11
| | | | | | | | | | | | | | which would not start throbbing until the load committed. I think this was always broken, but switching the tab contents types covered it up. Now I have a flag that goes along with the tab updating that indicates if it's a load update or a full update. This is necessary to avoid updating the title to the page's URL until it does actually commit. BUG=9310 Review URL: http://codereview.chromium.org/60066 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13131 0039d316-1c4b-4281-b951-d872f2087c98
* Allow live tabs to be dragged out of a window. Change TabStripModel such thatpinkerton@chromium.org2009-03-263-17/+31
| | | | | | | the caller must now explicitly show the newly created browser rather than it happening automatically. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@12550 0039d316-1c4b-4281-b951-d872f2087c98
* Cleanup in chrome/browserphajdan.jr@chromium.org2009-03-252-12/+12
| | | | | | | | | | - make more things const - remove unreferenced declaration of GetGoButton - fix indentation in one place Review URL: http://codereview.chromium.org/53053 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@12475 0039d316-1c4b-4281-b951-d872f2087c98
* Merge DOMUIContents into WebContents.brettw@chromium.org2009-03-171-2/+4
| | | | | | | I did a lot of cleanup of the DOM UI system as part of this. Review URL: http://codereview.chromium.org/42227 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11925 0039d316-1c4b-4281-b951-d872f2087c98