New issue
Advanced search Search tips

Issue 601776 link

Starred by 2 users

Issue metadata

Status: Archived
Owner: ----
Closed: Aug 13
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Windows
Pri: 2
Type: Bug



Sign in to add a comment

Non-lowercase MIME types are incorrectly handled when dragging and dropping to the TabStrip

Reported by mbl...@yandex-team.ru, Apr 8 2016

Issue description

UserAgent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 YaBrowser/16.3.0.6920 (beta) Safari/537.36

Steps to reproduce the problem:
Drop the .potm file on tab contents. MS Office should be installed on the machine so the .potm type would be registered. Here's the relevant registration information on my machine:

[HKEY_CLASSES_ROOT\.potm]
@="PowerPoint.TemplateMacroEnabled.12"
"Content Type"="application/vnd.ms-powerpoint.template.macroEnabled.12"
"PerceivedType"="document"

[HKEY_CLASSES_ROOT\.potm\PowerPoint.TemplateMacroEnabled.12]

[HKEY_CLASSES_ROOT\.potm\PowerPoint.TemplateMacroEnabled.12\ShellNew]

[HKEY_CLASSES_ROOT\.potm\ShellEx]

[HKEY_CLASSES_ROOT\.potm\ShellEx\PropertyHandler]
@="{993BE281-6695-4BA5-8A2A-7AACBFAAB69E}"

[HKEY_CLASSES_ROOT\.potm\ShellEx\{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}]
@="{C41662BB-1FA0-4CE0-8DC5-9B7F8279FF97}"

What is the expected behavior?

What went wrong?
Here's what happens after the drop operation is handled:
1. First we handle the dropping part of drag'n'drop:
*1      chrome.dll!BrowserTabStripController::CheckFileSupported(const GURL & url={...})
 2      chrome.dll!TabStrip::OnDragEntered(const ui::DropTargetEvent & event={...})
 3      chrome.dll!BrowserRootView::OnDragUpdated(const ui::DropTargetEvent & event={...})
 4      views.dll!views::DropHelper::NotifyDragOver(const ui::OSExchangeData & data={...}, const gfx::Point & root_view_location={...}, int drag_operation=7)
 5      views.dll!views::DropHelper::OnDragOver(const ui::OSExchangeData & data={...}, const gfx::Point & root_view_location={...}, int drag_operation=7)
 6      views.dll!views::DesktopNativeWidgetAura::OnDragUpdated(const ui::DropTargetEvent & event={...})
 7      views.dll!views::DesktopDropTargetWin::OnDragOver(IDataObject * data_object=0x51ec3640, unsigned long key_state=1, tagPOINT position={...}, unsigned long effect=7)
 8      ui_base.dll!ui::DropTargetWin::DragOver(unsigned long key_state=1, _POINTL cursor_position={...}, unsigned long * effect=0x5218279c)
 9      [External Code]
 10     base.dll!base::MessagePumpForUI::ProcessMessageHelper(const tagMSG & msg={...})
 11     base.dll!base::MessagePumpForUI::ProcessNextWindowsMessage()
 12     base.dll!base::MessagePumpForUI::DoRunLoop()
 13     base.dll!base::MessagePumpWin::RunWithDispatcher(base::MessagePump::Delegate * delegate=0x42aef608, base::MessagePumpDispatcher * dispatcher=0x00000000)
 14     base.dll!base::MessagePumpWin::Run(base::MessagePump::Delegate * delegate=0x42aef608)
 15     base.dll!base::MessageLoop::RunHandler()
 16     base.dll!base::RunLoop::Run()
 17     chrome.dll!ChromeBrowserMainParts::MainMessageLoopRun(int * result_code=0x42aed6b0)
 18     content.dll!content::BrowserMainLoop::RunMainMessageLoopParts()
 19     content.dll!content::BrowserMainRunnerImpl::Run()
 20     content.dll!content::BrowserMain(const content::MainFunctionParams & parameters={...})
 21     content.dll!content::RunNamedProcessTypeMain(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & process_type={...}, const content::MainFunctionParams & main_function_params={...}, content::ContentMainDelegate * delegate=0x0018fb64)
 22     content.dll!content::ContentMainRunnerImpl::Run()
 23     content.dll!content::ContentMain(const content::ContentMainParams & params={...})
 24     chrome.dll!ChromeMain(HINSTANCE__ * instance=0x00400000, sandbox::SandboxInterfaceInfo * sandbox_info=0x0018fbc8)
 25     chrome.exe!MainDllLoader::Launch(HINSTANCE__ * instance=0x00400000)
 26     chrome.exe!wWinMain(HINSTANCE__ * instance=0x00400000, HINSTANCE__ * prev=0x00000000, wchar_t * __formal=0x00c64182, int __formal=10)

2. Then get the MIME type from the registry:
*1      net.dll!net::PlatformMimeUtil::GetPlatformMimeTypeFromExtension(const std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > & ext={...}, std::basic_string<char,std::char_traits<char>,std::allocator<char> > * result=0x45c0f734)
 2      net.dll!net::MimeUtil::GetMimeTypeFromExtensionHelper(const std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > & ext={...}, bool include_platform_types=true, std::basic_string<char,std::char_traits<char>,std::allocator<char> > * result=0x45c0f734)
 3      net.dll!net::MimeUtil::GetMimeTypeFromExtension(const std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > & ext={...}, std::basic_string<char,std::char_traits<char>,std::allocator<char> > * result=0x45c0f734)
 4      net.dll!net::MimeUtil::GetMimeTypeFromFile(const base::FilePath & file_path={...}, std::basic_string<char,std::char_traits<char>,std::allocator<char> > * result=0x45c0f734)
 5      net.dll!net::GetMimeTypeFromFile(const base::FilePath & file_path={...}, std::basic_string<char,std::char_traits<char>,std::allocator<char> > * mime_type=0x45c0f734)
 6      chrome.dll!`anonymous namespace'::FindURLMimeType(const GURL & url={...})
 7      chrome.dll!base::internal::RunnableAdapter<std::basic_string<char,std::char_traits<char>,std::allocator<char> > (__cdecl*)(GURL const &)>::Run(const GURL & <args_0>={...})
 8      chrome.dll!base::internal::InvokeHelper<0,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,base::internal::RunnableAdapter<std::basic_string<char,std::char_traits<char>,std::allocator<char> > (__cdecl*)(GURL const &)>,base::internal::TypeList<GURL const &> >::MakeItSo(base::internal::RunnableAdapter<std::basic_string<char,std::char_traits<char>,std::allocator<char> > (__cdecl*)(GURL const &)> runnable={...}, const GURL & <args_0>={...})
 9      chrome.dll!base::internal::Invoker<base::IndexSequence<0>,base::internal::BindState<base::internal::RunnableAdapter<std::basic_string<char,std::char_traits<char>,std::allocator<char> > (__cdecl*)(GURL const &)>,std::basic_string<char,std::char_traits<char>,std::allocator<char> > __cdecl(GURL const &),GURL>,base::internal::TypeList<base::internal::UnwrapTraits<GURL> >,base::internal::InvokeHelper<0,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,base::internal::RunnableAdapter<std::basic_string<char,std::char_traits<char>,std::allocator<char> > (__cdecl*)(GURL const &)>,base::internal::TypeList<GURL const &> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> > __cdecl(void)>::Run(base::internal::BindStateBase * base=0x52240ae0)
 10     chrome.dll!base::Callback<std::basic_string<char,std::char_traits<char>,std::allocator<char> > __cdecl(void)>::Run()
 11     chrome.dll!base::internal::ReturnAsParamAdapter<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >(const base::Callback<std::basic_string<char,std::char_traits<char>,std::allocator<char> > __cdecl(void)> & func={...}, std::basic_string<char,std::char_traits<char>,std::allocator<char> > * result=0x52278338)
 12     chrome.dll!base::internal::RunnableAdapter<void (__cdecl*)(base::Callback<std::basic_string<char,std::char_traits<char>,std::allocator<char> > __cdecl(void)> const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)>::Run(const base::Callback<std::basic_string<char,std::char_traits<char>,std::allocator<char> > __cdecl(void)> & <args_0>={...}, std::basic_string<char,std::char_traits<char>,std::allocator<char> > * const & <args_1>=0x52278338)
 13     chrome.dll!base::internal::InvokeHelper<0,void,base::internal::RunnableAdapter<void (__cdecl*)(base::Callback<std::basic_string<char,std::char_traits<char>,std::allocator<char> > __cdecl(void)> const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)>,base::internal::TypeList<base::Callback<std::basic_string<char,std::char_traits<char>,std::allocator<char> > __cdecl(void)> const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > * const &> >::MakeItSo(base::internal::RunnableAdapter<void (__cdecl*)(base::Callback<std::basic_string<char,std::char_traits<char>,std::allocator<char> > __cdecl(void)> const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)> runnable={...}, const base::Callback<std::basic_string<char,std::char_traits<char>,std::allocator<char> > __cdecl(void)> & <args_0>={...}, std::basic_string<char,std::char_traits<char>,std::allocator<char> > * const & <args_1>=0x52278338)
 14     chrome.dll!base::internal::Invoker<base::IndexSequence<0,1>,base::internal::BindState<base::internal::RunnableAdapter<void (__cdecl*)(base::Callback<std::basic_string<char,std::char_traits<char>,std::allocator<char> > __cdecl(void)> const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)>,void __cdecl(base::Callback<std::basic_string<char,std::char_traits<char>,std::allocator<char> > __cdecl(void)> const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *),base::Callback<std::basic_string<char,std::char_traits<char>,std::allocator<char> > __cdecl(void)>,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *>,base::internal::TypeList<base::internal::UnwrapTraits<base::Callback<std::basic_string<char,std::char_traits<char>,std::allocator<char> > __cdecl(void)> >,base::internal::UnwrapTraits<std::basic_string<char,std::char_traits<char>,std::allocator<char> > *> >,base::internal::InvokeHelper<0,void,base::internal::RunnableAdapter<void (__cdecl
*)(base::Callback<std::basic_string<char,std::char_traits<char>,std::allocator<char> > __cdecl(void)> const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)>,base::internal::TypeList<base::Callback<std::basic_string<char,std::char_traits<char>,std::allocator<char> > __cdecl(void)> const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > * const &> >,void __cdecl(void)>::Run(base::internal::BindStateBase * base=0x52240bf0)
 15     base.dll!base::Callback<void __cdecl(void)>::Run()
 16     base.dll!base::`anonymous namespace'::PostTaskAndReplyRelay::Run()
 17     base.dll!base::internal::RunnableAdapter<void (__thiscall base::`anonymous namespace'::PostTaskAndReplyRelay::*)(void)>::Run(base::`anonymous-namespace'::PostTaskAndReplyRelay * object=0x5223b498)
 18     base.dll!base::internal::InvokeHelper<0,void,base::internal::RunnableAdapter<void (__thiscall base::`anonymous namespace'::PostTaskAndReplyRelay::*)(void)>,base::internal::TypeList<base::`anonymous namespace'::PostTaskAndReplyRelay *> >::MakeItSo(base::internal::RunnableAdapter<void (__thiscall base::`anonymous namespace'::PostTaskAndReplyRelay::*)(void)> runnable={...}, base::`anonymous-namespace'::PostTaskAndReplyRelay * <args_0>=0x5223b498)
 19     base.dll!base::internal::Invoker<base::IndexSequence<0>,base::internal::BindState<base::internal::RunnableAdapter<void (__thiscall base::`anonymous namespace'::PostTaskAndReplyRelay::*)(void)>,void __cdecl(base::`anonymous namespace'::PostTaskAndReplyRelay *),base::internal::UnretainedWrapper<base::`anonymous namespace'::PostTaskAndReplyRelay> >,base::internal::TypeList<base::internal::UnwrapTraits<base::internal::UnretainedWrapper<base::`anonymous namespace'::PostTaskAndReplyRelay> > >,base::internal::InvokeHelper<0,void,base::internal::RunnableAdapter<void (__thiscall base::`anonymous namespace'::PostTaskAndReplyRelay::*)(void)>,base::internal::TypeList<base::`anonymous namespace'::PostTaskAndReplyRelay *> >,void __cdecl(void)>::Run(base::internal::BindStateBase * base=0x52264d70)
 20     base.dll!base::Callback<void __cdecl(void)>::Run()
 21     base.dll!base::SequencedWorkerPool::Inner::ThreadLoop(base::SequencedWorkerPool::Worker * this_worker=0x441153c0)
 22     base.dll!base::SequencedWorkerPool::Worker::Run()
 23     base.dll!base::SimpleThread::ThreadMain()
 24     base.dll!base::`anonymous namespace'::ThreadFunc(void * params=0x44115460)

At this step Chromium reads the "Content Type" string which is "application/vnd.ms-powerpoint.template.macroEnabled.12" — note the capital 'E' in 'macroEnabled'.

3. Then proceed with getting a plugin for a specified MIME type:
*1      base.dll!base::debug::BreakDebugger()
 2      base.dll!logging::LogMessage::~LogMessage()
 3      content.dll!content::PluginList::GetPluginInfoArray(const GURL & url={...}, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & mime_type={...}, bool allow_wildcard=false, bool * use_stale=0x0018ec5f, bool include_npapi=true, std::vector<content::WebPluginInfo,std::allocator<content::WebPluginInfo> > * info=0x0018ec44, std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > * actual_mime_types=0x0018ec2c)
 4      content.dll!content::PluginServiceImpl::GetPluginInfoArray(const GURL & url={...}, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & mime_type={...}, bool allow_wildcard=false, std::vector<content::WebPluginInfo,std::allocator<content::WebPluginInfo> > * plugins=0x0018ecb4, std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > * actual_mime_types=0x0018ec9c)
 5      content.dll!content::PluginServiceImpl::GetPluginInfo(int render_process_id=-1, int render_frame_id=-2, content::ResourceContext * context=0x442cc7b0, const GURL & url={...}, const GURL & page_url={...}, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & mime_type={...}, bool allow_wildcard=false, bool * is_stale=0x00000000, content::WebPluginInfo * info=0x0018ed80, std::basic_string<char,std::char_traits<char>,std::allocator<char> > * actual_mime_type=0x00000000)
 6      chrome.dll!BrowserTabStripController::OnFindURLMimeTypeCompleted(const GURL & url={...}, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & mime_type={...})
 7      chrome.dll!base::internal::RunnableAdapter<void (__thiscall BrowserTabStripController::*)(GURL const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)>::Run(BrowserTabStripController * object=0x495171f0, const GURL & <args_0>={...}, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & <args_1>={...})
 8      chrome.dll!base::internal::InvokeHelper<1,void,base::internal::RunnableAdapter<void (__thiscall BrowserTabStripController::*)(GURL const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)>,base::internal::TypeList<base::WeakPtr<BrowserTabStripController> const &,GURL const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &> >::MakeItSo(base::internal::RunnableAdapter<void (__thiscall BrowserTabStripController::*)(GURL const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)> runnable={...}, const base::WeakPtr<BrowserTabStripController> & weak_ptr={...}, const GURL & <args_0>={...}, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & <args_1>={...})
 9      chrome.dll!base::internal::Invoker<base::IndexSequence<0,1>,base::internal::BindState<base::internal::RunnableAdapter<void (__thiscall BrowserTabStripController::*)(GURL const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)>,void __cdecl(BrowserTabStripController *,GURL const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &),base::WeakPtr<BrowserTabStripController>,GURL>,base::internal::TypeList<base::internal::UnwrapTraits<base::WeakPtr<BrowserTabStripController> >,base::internal::UnwrapTraits<GURL> >,base::internal::InvokeHelper<1,void,base::internal::RunnableAdapter<void (__thiscall BrowserTabStripController::*)(GURL const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)>,base::internal::TypeList<base::WeakPtr<BrowserTabStripController> const &,GURL const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &> >,void __cdecl(std::basic_string<char,std::char_traits<char>,std::allocato
r<char> > const &)>::Run(base::internal::BindStateBase * base=0x5353b318, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & <unbound_args_0>={...})
 10     chrome.dll!base::Callback<void __cdecl(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)>::Run(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & <args_0>={...})
 11     chrome.dll!base::internal::ReplyAdapter<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &>(const base::Callback<void __cdecl(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)> & callback={...}, std::basic_string<char,std::char_traits<char>,std::allocator<char> > * result=0x5352ca18)
 12     chrome.dll!base::internal::RunnableAdapter<void (__cdecl*)(base::Callback<void __cdecl(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)> const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)>::Run(const base::Callback<void __cdecl(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)> & <args_0>={...}, std::basic_string<char,std::char_traits<char>,std::allocator<char> > * const & <args_1>=0x5352ca18)
 13     chrome.dll!base::internal::InvokeHelper<0,void,base::internal::RunnableAdapter<void (__cdecl*)(base::Callback<void __cdecl(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)> const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)>,base::internal::TypeList<base::Callback<void __cdecl(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)> const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *> >::MakeItSo(base::internal::RunnableAdapter<void (__cdecl*)(base::Callback<void __cdecl(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)> const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)> runnable={...}, const base::Callback<void __cdecl(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)> & <args_0>={...}, std::basic_string<char,std::char_traits<char>,std::allocator<char> > * <args_1>=0x5352ca18)
 14     chrome.dll!base::internal::Invoker<base::IndexSequence<0,1>,base::internal::BindState<base::internal::RunnableAdapter<void (__cdecl*)(base::Callback<void __cdecl(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)> const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)>,void __cdecl(base::Callback<void __cdecl(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)> const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *),base::Callback<void __cdecl(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)>,base::internal::OwnedWrapper<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,base::internal::TypeList<base::internal::UnwrapTraits<base::Callback<void __cdecl(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)> >,base::internal::UnwrapTraits<base::internal::OwnedWrapper<std::basic_string<char,std::char_traits<char>,std::allocator<cha
r> > > > >,base::internal::InvokeHelper<0,void,base::internal::RunnableAdapter<void (__cdecl*)(base::Callback<void __cdecl(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)> const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)>,base::internal::TypeList<base::Callback<void __cdecl(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)> const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *> >,void __cdecl(void)>::Run(base::internal::BindStateBase * base=0x5353b898)
 15     base.dll!base::Callback<void __cdecl(void)>::Run()
 16     base.dll!base::`anonymous namespace'::PostTaskAndReplyRelay::RunReplyAndSelfDestruct()
 17     base.dll!base::internal::RunnableAdapter<void (__thiscall base::`anonymous namespace'::PostTaskAndReplyRelay::*)(void)>::Run(base::`anonymous-namespace'::PostTaskAndReplyRelay * object=0x5353b468)
 18     base.dll!base::internal::InvokeHelper<0,void,base::internal::RunnableAdapter<void (__thiscall base::`anonymous namespace'::PostTaskAndReplyRelay::*)(void)>,base::internal::TypeList<base::`anonymous namespace'::PostTaskAndReplyRelay *> >::MakeItSo(base::internal::RunnableAdapter<void (__thiscall base::`anonymous namespace'::PostTaskAndReplyRelay::*)(void)> runnable={...}, base::`anonymous-namespace'::PostTaskAndReplyRelay * <args_0>=0x5353b468)
 19     base.dll!base::internal::Invoker<base::IndexSequence<0>,base::internal::BindState<base::internal::RunnableAdapter<void (__thiscall base::`anonymous namespace'::PostTaskAndReplyRelay::*)(void)>,void __cdecl(base::`anonymous namespace'::PostTaskAndReplyRelay *),base::internal::UnretainedWrapper<base::`anonymous namespace'::PostTaskAndReplyRelay> >,base::internal::TypeList<base::internal::UnwrapTraits<base::internal::UnretainedWrapper<base::`anonymous namespace'::PostTaskAndReplyRelay> > >,base::internal::InvokeHelper<0,void,base::internal::RunnableAdapter<void (__thiscall base::`anonymous namespace'::PostTaskAndReplyRelay::*)(void)>,base::internal::TypeList<base::`anonymous namespace'::PostTaskAndReplyRelay *> >,void __cdecl(void)>::Run(base::internal::BindStateBase * base=0x5353a998)
 20     base.dll!base::Callback<void __cdecl(void)>::Run()
 21     base.dll!base::debug::TaskAnnotator::RunTask(const char * queue_function=0x103a2034, const base::PendingTask & pending_task={...})
 22     base.dll!base::MessageLoop::RunTask(const base::PendingTask & pending_task={...})
 23     base.dll!base::MessageLoop::DeferOrRunPendingTask(const base::PendingTask & pending_task={...})
 24     base.dll!base::MessageLoop::DoWork()
 25     base.dll!base::MessagePumpForUI::DoRunLoop()
 26     base.dll!base::MessagePumpWin::RunWithDispatcher(base::MessagePump::Delegate * delegate=0x42c0f5e0, base::MessagePumpDispatcher * dispatcher=0x00000000)
 27     base.dll!base::MessagePumpWin::Run(base::MessagePump::Delegate * delegate=0x42c0f5e0)
 28     base.dll!base::MessageLoop::RunHandler()
 29     base.dll!base::RunLoop::Run()
 30     chrome.dll!ChromeBrowserMainParts::MainMessageLoopRun(int * result_code=0x42c0d688)
 31     content.dll!content::BrowserMainLoop::RunMainMessageLoopParts()
 32     content.dll!content::BrowserMainRunnerImpl::Run()
 33     content.dll!content::BrowserMain(const content::MainFunctionParams & parameters={...})
 34     content.dll!content::RunNamedProcessTypeMain(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & process_type={...}, const content::MainFunctionParams & main_function_params={...}, content::ContentMainDelegate * delegate=0x0018fb64)
 35     content.dll!content::ContentMainRunnerImpl::Run()
 36     content.dll!content::ContentMain(const content::ContentMainParams & params={...})
 37     chrome.dll!ChromeMain(HINSTANCE__ * instance=0x00400000, sandbox::SandboxInterfaceInfo * sandbox_info=0x0018fbc8)
 38     chrome.exe!MainDllLoader::Launch(HINSTANCE__ * instance=0x00400000)
 39     chrome.exe!wWinMain(HINSTANCE__ * instance=0x00400000, HINSTANCE__ * prev=0x00000000, wchar_t * __formal=0x009a4182, int __formal=10)

And it fails on DCHECK, as the MIME type is not all lowercase.

Did this work before? N/A 

Chrome version: 51.0.2703.0  Channel: canary
OS Version: 10
Flash Version: 

Related CL: https://codereview.chromium.org/1853653004/
 
Cc: asanka@chromium.org mmenke@chromium.org rsleevi@chromium.org sky@chromium.org
Components: UI>Browser>TabStrip Internals>Plugins
Summary: Non-lowercase MIME types are incorrectly handled when dragging and dropping to the TabStrip (was: Non-lowercase MIME types are incorrectly handled on Windows)
Sounds like the normalization should happen in BrowserTabStripController::OnFindURLMimeTypeCompleted - that is, the Plugin code always expects lower-case mimetypes, so that should be normalized. I think we still want the OS to return the OS-provided mimetype, which may include capitalization. 

Adding asanka from the original review ( https://chromium.googlesource.com/chromium/src/+/01e117df184677e024d7f4f17fee7fdfeb1e4053%5E%21/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc ) and sky for tabstrip to see if there's any concerns with that.
Status: Untriaged (was: Unconfirmed)

Comment 3 by asanka@chromium.org, Apr 14 2016

I'm okay with OnFindURLMimeTypeCompleted doing the normalization on its own.

I'll note that that PluginService (in //content/public/plugin_service.h) doesn't specify that the MIME types it receives need to be normalized on entry. Given that //content/public is a public API, I'd also be good with either normalizing MIME types that are crossing that boundary or documenting and enforcing that the MIME type needs to be normalized.


Status: Available (was: Untriaged)
Project Member

Comment 5 by sheriffbot@chromium.org, Apr 28 2017

Labels: Hotlist-Recharge-Cold
Status: Untriaged (was: Available)
This issue has been available for more than 365 days, and should be re-evaluated. Please re-triage this issue.
The Hotlist-Recharge-Cold label is applied for tracking purposes, and should not be removed after re-triaging the issue.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
Status: Archived (was: Untriaged)
Archiving old bugs that have Hotlist-Recharge-Cold and haven't been modified in over a year. 

If you feel this issue should still be addressed, feel free to reopen it or to file a new issue.

Sign in to add a comment