download_saveimage流程

Y:\chromium_org\src\chrome\android\java\src\org\chromium\chrome\browser\contextmenu\ChromeContextMenuPopulator.java

 

public booleanonItemSelected(ContextMenuHelper helper, ContextMenuParams params, int itemId){

……

} else if (itemId == R.id.contextmenu_save_image){

           ContextMenuUma.record(params, ContextMenuUma.ACTION_SAVE_IMAGE);

           if (mDelegate.startDownload(params.getSrcUrl(), false)) {

                helper.startContextMenuDownload(

                        false,mDelegate.isDataReductionProxyEnabledForURL(params.getSrcUrl()));

           }

       } else if (itemId == R.id.contextmenu_save_video) {

           ContextMenuUma.record(params, ContextMenuUma.ACTION_SAVE_VIDEO);

           if (mDelegate.startDownload(params.getSrcUrl(), false)) {

                helper.startContextMenuDownload(false,false);

           }

       } else if (itemId == R.id.contextmenu_save_link_as) {

           ContextMenuUma.record(params, ContextMenuUma.ACTION_SAVE_LINK);

           String url =params.getUnfilteredLinkUrl();

           if (mDelegate.startDownload(url, true)) {

               ContextMenuUma.recordSaveLinkTypes(url);

                helper.startContextMenuDownload(true,false);

           }

       }

…..

}

 

 

Y:\chromium_org\src\chrome\android\java\src\org\chromium\chrome\browser\contextmenu\ContextMenuHelper.java

 

publicvoid startContextMenuDownload(boolean isLink,boolean isDataReductionProxyEnabled) {

 

privatenative void nativeOnStartDownload(

            long nativeContextMenuHelper,boolean isLink, boolean isDataReductionProxyEnabled);

 

 

 

X:\SmartGit_trunk_2.0\chromium_2125\android_packages_apps_Browser_chromium\src\chrome\browser\ui\android\context_menu_helper.cc

 

voidContextMenuHelper::OnStartDownload(

    JNIEnv* env,

    const JavaParamRef<jobject>& obj,

    jboolean jis_link,

jboolean jis_data_reduction_proxy_enabled)

 

 

 

 

Y:\chromium_org\src\chrome\browser\android\download\download_controller.cc

voidDownloadController::StartContextMenuDownload(

    const ContextMenuParams& params,WebContents* web_contents, bool is_link,

const std::string& extra_headers)

 

void CreateContextMenuDownload(int render_process_id,

                               intrender_view_id,

                               constcontent::ContextMenuParams& params,

                               bool is_link,

                               conststd::string& extra_headers,

                               bool granted)

{

……

         if (!is_link &&extra_headers.empty())

             dl_params->set_prefer_cache(true);

       dl_params->set_prompt(false);

       dlm->DownloadUrl(std::move(dl_params));

……

}

 

/chromium_new/src/content/browser/download/download_manager_impl.cc

voidDownloadManagerImpl::DownloadUrl(

std::unique_ptr<DownloadUrlParameters> params){

……

BrowserThread::PostTaskAndReplyWithResult(

      BrowserThread::IO,FROM_HERE,

     base::Bind(&BeginDownload, base::Passed(&params),

                browser_context_->GetResourceContext(),

                content::DownloadItem::kInvalidId, weak_factory_.GetWeakPtr()),

     base::Bind(&DownloadManagerImpl::AddUrlDownloader,

                weak_factory_.GetWeakPtr()));

……

}

 

 

std::unique_ptr<UrlDownloader,BrowserThread::DeleteOnIOThread> BeginDownload(

    std::unique_ptr<DownloadUrlParameters>params,

    content::ResourceContext* resource_context,

    uint32_t download_id,

base::WeakPtr<DownloadManagerImpl> download_manager){



/chromium_new/src/content/browser/loader/resource_dispatcher_host_impl.cc

DownloadInterruptReasonResourceDispatcherHostImpl::BeginDownload(

    std::unique_ptr<net::URLRequest>request,

    const Referrer& referrer,

    bool is_content_initiated,

    ResourceContext* context,

    int render_process_id,

    int render_view_route_id,

    int render_frame_route_id,

bool do_not_prompt_for_login)

 

ResourceDispatcherHostImpl::CreateResourceHandlerForDownload(

    net::URLRequest* request,

    bool is_content_initiated,

bool must_download)

 

voidResourceDispatcherHostImpl::BeginRequestInternal(

    std::unique_ptr<net::URLRequest>request,

std::unique_ptr<ResourceHandler> handler)

 

 

 

 

 

 

//

/chromium_2125_2.0/src/content/browser/download/download_resource_handler.cc

boolDownloadResourceHandler::OnResponseStarted(

    ResourceResponse* response,

bool* defer)

 

staticvoid StartOnUIThread(

    scoped_ptr<DownloadCreateInfo> info,

    DownloadResourceHandler::DownloadTabInfo*tab_info,

    scoped_ptr<ByteStreamReader> stream,

const DownloadUrlParameters::OnStartedCallback& started_cb)

 

/chromium_2125_2.0/src/content/browser/download/download_manager_impl.cc

voidDownloadManagerImpl::StartDownload(

    scoped_ptr<DownloadCreateInfo> info,

    scoped_ptr<ByteStreamReader> stream,

const DownloadUrlParameters::OnStartedCallback& on_started)

 

voidDownloadManagerImpl::StartDownloadWithId(

    scoped_ptr<DownloadCreateInfo> info,

    scoped_ptr<ByteStreamReader> stream,

    constDownloadUrlParameters::OnStartedCallback& on_started,

    bool new_download,

uint32 id){

……

  base::FilePath default_download_directory;

  if (delegate_) {

    base::FilePath website_save_directory;  // Unused

    bool skip_dir_check = false;            // Unused

   delegate_->GetSaveDir(GetBrowserContext(),&website_save_directory,

                          &default_download_directory,&skip_dir_check);

  }

……

download->Start(download_file.Pass(),req_handle.Pass());

……

}

 

/chromium_2125_2.0/src/content/browser/download/download_item_impl.cc

voidDownloadItemImpl::Start(

    scoped_ptr<DownloadFile> file,

scoped_ptr<DownloadRequestHandleInterface> req_handle)


void DownloadItemImpl::OnDownloadFileInitialized(

DownloadInterruptReason result)

 

voidDownloadItemImpl::OnDownloadTargetDetermined(

    const base::FilePath& target_path,

    TargetDisposition disposition,

    DownloadDangerType danger_type,

const base::FilePath& intermediate_path)

 

voidDownloadItemImpl::OnDownloadRenamedToIntermediateName(

    DownloadInterruptReason reason,

const base::FilePath& full_path)

 

delegate上层需要设置

/chromium_2125_2.0/src/chrome/browser/download/

chrome_download_manager_delegate.cc

 

### 回答1: flash_download_tool v3.6.2 是一种用于下载和刷写固件的工具。它是一款功能强大且易于使用的软件,可用于各种不同类型的设备和芯片。 首先,flash_download_tool v3.6.2 具有用户友好的界面设计,使得用户可以轻松地进行操作。它提供了直观的操作界面,清晰明了地显示出各种功能选项,使得用户能够快速找到所需的功能。此外,它还提供了详细的操作指南和提示,帮助用户更好地理解和使用该工具。 其次,flash_download_tool v3.6.2 具有强大的功能。它支持多种下载和刷写固件的方式,能够满足各种设备的需求。无论是单个设备的刷写,还是批量设备的同时刷写,flash_download_tool v3.6.2 都能够稳定可靠地完成任务。此外,它还提供了备份和恢复固件的功能,确保固件的安全性和可靠性。 最后,flash_download_tool v3.6.2 适用于各种芯片和设备。它具有广泛的兼容性,可以与多种型号和品牌的芯片进行兼容。无论是手机、平板还是其他嵌入式设备,flash_download_tool v3.6.2 都能够完美支持。 总的来说,flash_download_tool v3.6.2 是一款功能强大、易于使用和兼容性广泛的工具。它为用户提供了快速、稳定和安全的下载和刷写固件的功能,帮助用户轻松完成各种固件操作任务。无论是个人用户还是企业用户,flash_download_tool v3.6.2 都是一个理想的选择。 ### 回答2: flash_download_tool v3.6.2是一种用于下载固件和软件的工具。这个工具通常用于将固件或软件程序加载到电子设备中,以进行升级、修复或改进功能。 这个版本的Flash Download Tool(v3.6.2)具有许多功能和优点。首先,它提供了一个直观和易于使用的用户界面,使用户能够轻松地选择和下载所需的固件或软件。它支持各种操作系统和设备,包括Windows、Linux和Mac OS,以满足不同用户的需求。 其次,Flash Download Tool v3.6.2具有更快的下载速度和更稳定的连接,在下载较大的文件时非常有用。它还支持多线程下载,可以同时下载多个文件,提高下载效率。 此外,Flash Download Tool v3.6.2还具有一些高级功能,如断点续传和下载管理。断点续传功能允许在下载中断或失败后从上次中断的地方重新开始下载,而无需重新下载整个文件。下载管理功能允许用户对下载任务进行管理,包括暂停、取消和重新启动下载。 总的来说,Flash Download Tool v3.6.2是一个强大而实用的工具,可以帮助用户方便地下载和管理固件和软件。它的用户界面友好,功能丰富,具有快速下载和稳定的连接。无论是普通用户还是专业人士,都可以从中受益,并改进他们所使用的电子设备的性能和功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值