亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

將應(yīng)用的功能擴(kuò)展到另一應(yīng)用的允許擴(kuò)展的相容擴(kuò)展點的制作方法

文檔序號:12287823閱讀:266來源:國知局
將應(yīng)用的功能擴(kuò)展到另一應(yīng)用的允許擴(kuò)展的相容擴(kuò)展點的制作方法與工藝

本申請要求全部提交于2014年5月29日的美國臨時專利申請No.62/004,777、62/004,778和62/004,780的權(quán)益。本申請還涉及2014年9月16日提交的,代理文獻(xiàn)號No.4860P22650的美國專利申請No.14/488,122和代理文獻(xiàn)號No.4860P23308的美國專利申請No.14/488,126。上文所述申請的公開內(nèi)容全文以引用方式并入本文。

技術(shù)領(lǐng)域

本發(fā)明的實施例總體上涉及數(shù)據(jù)處理系統(tǒng)的操作系統(tǒng)。更具體而言,本發(fā)明的實施例涉及提供相容擴(kuò)展點,用于將一項應(yīng)用的功能擴(kuò)展到另一項應(yīng)用。



背景技術(shù):

對所有類型基于處理器的電子設(shè)備,尤其是計算設(shè)備的安全性關(guān)切已經(jīng)成為一項重要關(guān)切。盡管一些關(guān)切可能涉及到可以由此類設(shè)備實施的缺陷代碼采取的有害動作,但更大的關(guān)切涉及通過惡意代碼對此類設(shè)備進(jìn)行的各種類型攻擊的后果,所述惡意代碼包括本領(lǐng)域常規(guī)以若干名稱所知的代碼,包括“病毒”、“蠕蟲”、“特洛伊木馬”、“間諜軟件”、“廣告軟件”等。此類惡意代碼可能的效果從較為溫和,例如在屏幕上顯示消息或獲取對設(shè)備有限功能的控制;到高度有害,例如獲取對設(shè)備的完全控制,運行過程,發(fā)送和/或刪除文件等。幾乎任何類型的基于處理器的設(shè)備上可以想到的動作都是惡意代碼攻擊的目標(biāo)。

這些攻擊中的很多指向計算設(shè)備,例如工作站、服務(wù)器、臺式計算機(jī)、筆記本計算機(jī)和手持計算機(jī)和其他類似設(shè)備。這些計算設(shè)備中的很多可以運行一種或多種應(yīng)用程序,用戶可以操作這些應(yīng)用程序以執(zhí)行一組期望功能。不過,這樣的攻擊不限于此類計算設(shè)備。更寬范圍的各種類型設(shè)備,例如手機(jī)、個人數(shù)字助理(“PDA”)、音樂和視頻播放器、網(wǎng)絡(luò)路由器、交換機(jī)或網(wǎng)橋和利用微處理器、微控制器或數(shù)字信號處理器執(zhí)行代碼指令的其他設(shè)備已經(jīng)成為惡意代碼攻擊的目標(biāo)。

在一種特定狀況下,諸如瀏覽器應(yīng)用的一種應(yīng)用可能必須要調(diào)用插件(也稱為應(yīng)用擴(kuò)展),插件可能是由第三方開發(fā)的。典型地,在應(yīng)用調(diào)用與應(yīng)用(也稱為宿主應(yīng)用)相關(guān)聯(lián)的插件時,操作系統(tǒng)啟動該應(yīng)用的同一過程地址空間內(nèi)的插件,如圖1所示。參考圖1,在應(yīng)用104調(diào)用插件105時,應(yīng)用管理器101的應(yīng)用啟動模塊102加載應(yīng)用104的同一過程地址空間106內(nèi)的插件105。由于應(yīng)用104及其插件105運行于同一地址空間106內(nèi),插件105可能能夠訪問應(yīng)用104可訪問的資源,其中資源可能是由資源管理器103管理的。從資源管理器103的角度來看,應(yīng)用104和插件105是相同的過程。那樣可能導(dǎo)致如果插件105證實為惡意軟件,應(yīng)用104容易受到攻擊。

例如,如果插件105是為應(yīng)用104開發(fā)的第三方插件,且如果應(yīng)用104可以訪問本地存儲器和網(wǎng)絡(luò),插件105可以利用并攻擊本地存儲器和網(wǎng)絡(luò)中存儲的文件。此外,即使插件105不是惡意軟件,在插件105損壞時,它也可能使應(yīng)用104損壞或?qū)е聭?yīng)用104出現(xiàn)故障。此外,在插件105被啟動模塊102終止時,終止插件105可能導(dǎo)致應(yīng)用104不穩(wěn)定,因為它們處在同一過程地址空間106中。

常規(guī)系統(tǒng)利用定制的通用資源定位符(URL)方案在兩種應(yīng)用之間進(jìn)行過程間通信,這樣的問題是可發(fā)現(xiàn)性有限、安全性關(guān)切,以及在雙向通信困難且脆弱的情況下一般沒有靈活性。URL方案可能導(dǎo)致應(yīng)用切換到宿主應(yīng)用,這可能使用戶從發(fā)起應(yīng)用的過程脫離,并破壞任何視覺語境,且關(guān)聯(lián)的工作流將會丟失。檢測這樣的狀況是非常困難的。

在嘗試減少或消除惡意或缺陷代碼攻擊和影響時已經(jīng)使用了若干種方法。通常,這些方法包括檢測、阻止和緩解。具體而言,這些方法的范圍從嘗試掃描、識別、隔離并可能地在向系統(tǒng)引入惡意代碼之前或在其造成損害之前刪除惡意代碼(例如,像防病毒軟件等的目的那樣),到限制或包含惡意或缺陷代碼影響的過程采取的動作。不過,一直沒有有效率的方式應(yīng)對與以安全方式調(diào)用另一應(yīng)用的應(yīng)用相關(guān)聯(lián)的插件。

附圖說明

本發(fā)明的各實施例以舉例的方式進(jìn)行說明,而不僅限于各個附圖的圖形,在附圖中類似的附圖標(biāo)號表示類似的元件。

圖1是示出了數(shù)據(jù)處理系統(tǒng)的常規(guī)操作系統(tǒng)的框圖。

圖2A-2B是示出了根據(jù)本發(fā)明特定實施例,用于管理應(yīng)用擴(kuò)展的系統(tǒng)架構(gòu)的框圖。

圖2C是示出了根據(jù)本發(fā)明一個實施例,用于執(zhí)行應(yīng)用和應(yīng)用擴(kuò)展的方法的流程圖。

圖3A-3B是示出了根據(jù)本發(fā)明特定實施例的操作系統(tǒng)架構(gòu)示例的框圖。

圖4A是示出了根據(jù)本發(fā)明一個實施例的應(yīng)用和應(yīng)用擴(kuò)展之間通信配置的框圖;

圖4B是示出了根據(jù)本發(fā)明另一實施例,用于應(yīng)對應(yīng)用擴(kuò)展的方法的流程圖。

圖5A是示出了根據(jù)本發(fā)明一個實施例,用于為擴(kuò)展點發(fā)展擴(kuò)展的系統(tǒng)的框圖。

圖5B是示出了根據(jù)本發(fā)明一個實施例,用于為擴(kuò)展點發(fā)展擴(kuò)展的方法的流程圖。

圖6A是示出了根據(jù)本發(fā)明一個實施例的擴(kuò)展框架的注冊系統(tǒng)的框圖。

圖6B是示出了根據(jù)本發(fā)明一個實施例,用于管理經(jīng)由擴(kuò)展點的擴(kuò)展的方法的流程圖。

圖7A是示出了根據(jù)本發(fā)明一個實施例的動作擴(kuò)展點的示例的框圖。

圖7B是示出了根據(jù)本發(fā)明一個實施例,提供動作擴(kuò)展服務(wù)的方法的流程圖。

圖8A是示出了根據(jù)本發(fā)明一個實施例,用于提供內(nèi)容共享服務(wù)的共享擴(kuò)展點的框圖。

圖8B是示出了根據(jù)本發(fā)明一個實施例,使用共享擴(kuò)展共享內(nèi)容的方法的流程圖。

圖9是示出了根據(jù)本發(fā)明一個實施例,用于應(yīng)對應(yīng)用終止的過程的框圖。

圖10是示出了根據(jù)本發(fā)明一個實施例,用于經(jīng)由其相應(yīng)擴(kuò)展訪問應(yīng)用的系統(tǒng)的框圖。

圖11A-11B是示出了根據(jù)本發(fā)明一個實施例的應(yīng)用的圖形用戶界面示例的屏幕截圖。

圖12A-12C是示出了根據(jù)本發(fā)明一個實施例的應(yīng)用的圖形用戶界面示例的屏幕截圖。

圖13是可用于本發(fā)明一個實施例的數(shù)據(jù)處理系統(tǒng)示例的框圖。

具體實施方式

將參考以下討論的細(xì)節(jié)來描述本發(fā)明的多個實施例和方面,并且附圖將圖示所述多個實施例。以下描述和附圖對本發(fā)明做出例示,并且不應(yīng)被理解為限制本發(fā)明。描述了眾多的具體細(xì)節(jié)以提供對本發(fā)明多個實施例的全面理解。然而,在某些實例中,眾所周知或常規(guī)的細(xì)節(jié)并未被描述以便提供對本發(fā)明的實施例的簡明論述。

在本說明書中對“一個實施例”或“實施例”的引用是指結(jié)合該實施例描述的特定特征、結(jié)構(gòu)或特性可以被包括在本發(fā)明的至少一個實施例中。在本說明書中的不同位置出現(xiàn)的短語“在一個實施例中”不一定都是指同一個實施例。

根據(jù)本發(fā)明的一個方面,應(yīng)用擴(kuò)展(也稱為插件或簡稱擴(kuò)展)和托管應(yīng)用擴(kuò)展的應(yīng)用被加載并執(zhí)行于獨立的過程地址空間中并被操作系統(tǒng)像獨立過程那樣對待。在一個實施例中,在第一沙箱化環(huán)境中啟動并執(zhí)行托管應(yīng)用擴(kuò)展的應(yīng)用,在第二沙箱化環(huán)境中啟動并執(zhí)行應(yīng)用擴(kuò)展。分別基于第一安全或沙箱概況和第二安全或沙箱概況配置第一沙箱化環(huán)境和第二沙箱化環(huán)境。該應(yīng)用和應(yīng)用擴(kuò)展經(jīng)由過程間通信(IPC)框架彼此通信。操作系統(tǒng)分別基于第一和第二安全概況逐個或獨立地實施安全并管理應(yīng)用和應(yīng)用擴(kuò)展的資源。

根據(jù)一個實施例,在應(yīng)用擴(kuò)展產(chǎn)生要向用戶顯示的內(nèi)容,例如圖形用戶界面(GUI)內(nèi)容時,該內(nèi)容經(jīng)由IPC框架被注入應(yīng)用中并呈現(xiàn)給用戶,無需應(yīng)用經(jīng)由應(yīng)用編程接口(API)直接訪問應(yīng)用擴(kuò)展,這樣需要運行于同一過程地址空間內(nèi)的應(yīng)用擴(kuò)展。具體而言,遠(yuǎn)程視圖控制器嵌入每個應(yīng)用和應(yīng)用擴(kuò)展中以將應(yīng)用擴(kuò)展給出的GUI內(nèi)容注入應(yīng)用中。運行于應(yīng)用和應(yīng)用擴(kuò)展內(nèi)(或與之相關(guān)聯(lián))的遠(yuǎn)程視圖控制器被配置為在應(yīng)用和應(yīng)用擴(kuò)展之間對用戶與GUI內(nèi)容的交互進(jìn)行同步。

根據(jù)另一個實施例,由于應(yīng)用和應(yīng)用擴(kuò)展運行于其相應(yīng)的過程地址空間中,所以可以獨立地管理與應(yīng)用和應(yīng)用擴(kuò)展相關(guān)聯(lián)的資源而不會對其他對應(yīng)者導(dǎo)致顯著干擾。例如,可以關(guān)閉或終止應(yīng)用擴(kuò)展而不影響應(yīng)用的操作,因為兩者之間的通信是由IPC框架管理的。在應(yīng)用和應(yīng)用擴(kuò)展中的一個擴(kuò)展需要升級或終止時,根據(jù)一個實施例,另一方可以與操作系統(tǒng)通信以判斷用戶當(dāng)前是否在使用另一方,以判斷升級或終止自身是否安全。例如,在接收到升級應(yīng)用的升級請求時,該應(yīng)用或升級管理器可以與中央管理機(jī)構(gòu)(例如,窗口服務(wù)器)通信,以判斷用戶當(dāng)前是否在訪問應(yīng)用擴(kuò)展的用戶接口。僅在判定用戶當(dāng)前未使用應(yīng)用擴(kuò)展的時候才進(jìn)行應(yīng)用的升級或終止;否則,拒絕該請求。

根據(jù)另一實施例,在操作系統(tǒng)已經(jīng)安裝應(yīng)用擴(kuò)展時,向用戶提供選項以激活/啟用或去活/禁用應(yīng)用擴(kuò)展。例如,可以在應(yīng)用控制中心的用戶界面內(nèi)將針對操作系統(tǒng)的應(yīng)用控制中心(例如,通知中心)的已安裝應(yīng)用的已安裝應(yīng)用擴(kuò)展顯示為宿主應(yīng)用。應(yīng)用控制中心的用戶界面可以顯示啟用/禁用選項(例如,諸如圖標(biāo)的開關(guān)圖形表達(dá))以允許用戶啟用或禁用已安裝的應(yīng)用擴(kuò)展。僅在啟用應(yīng)用擴(kuò)展的時候才可以從應(yīng)用控制中心訪問應(yīng)用擴(kuò)展(例如,以利用關(guān)聯(lián)的已安裝應(yīng)用的功能);否則,用戶必須要使用與應(yīng)用擴(kuò)展相關(guān)聯(lián)的已安裝應(yīng)用。應(yīng)用控制中心可以與各種應(yīng)用的擴(kuò)展相關(guān)聯(lián),每種擴(kuò)展都能夠被逐一配置(例如,啟用或禁用)。于是,應(yīng)用控制中心充當(dāng)著訪問各種應(yīng)用功能的集中進(jìn)入點。結(jié)果,在應(yīng)用控制中心中托管并啟用擴(kuò)展的情況下,用戶無需逐個啟動并訪問應(yīng)用。

根據(jù)本發(fā)明的另一個方面,擴(kuò)展框架包括一組擴(kuò)展接口,這里稱為擴(kuò)展點,以允許第一應(yīng)用調(diào)用第二應(yīng)用的擴(kuò)展,以訪問與通過擴(kuò)展而擴(kuò)展的第二應(yīng)用相關(guān)聯(lián)的一組預(yù)定義功能。該組擴(kuò)展點可以包括與操作系統(tǒng)相關(guān)聯(lián)的各種常用或普及功能或服務(wù)。擴(kuò)展點定義了一組預(yù)定義應(yīng)用編程接口(API)或通信協(xié)議,其允許客戶端,無論是第一應(yīng)用還是第二應(yīng)用,從另一客戶端訪問或向另一個客戶端提供服務(wù)。由擴(kuò)展點提供的服務(wù)可以由操作系統(tǒng)的標(biāo)準(zhǔn)部件或第三方供應(yīng)商提供的第三方功能提供。

在一個實施例中,擴(kuò)展框架充當(dāng)兩個過程(例如,擴(kuò)展和宿主應(yīng)用)之間的連接操作者而工作。擴(kuò)展框架提供發(fā)現(xiàn)方面并擴(kuò)展安全域。在第一應(yīng)用希望訪問由另一應(yīng)用提供的預(yù)定義功能(例如,內(nèi)容共享或照片過濾)時,第一應(yīng)用與和該預(yù)定義功能相關(guān)聯(lián)的對應(yīng)擴(kuò)展點通信,以查詢誰能夠提供這樣的服務(wù)。擴(kuò)展框架接著搜索并識別由已經(jīng)向擴(kuò)展框架注冊的其他應(yīng)用提供的一個或多個擴(kuò)展的列表,以提供所請求的服務(wù)。擴(kuò)展框架可以返回所識別擴(kuò)展的列表以允許第一應(yīng)用為所請求服務(wù)選擇列表中的第二應(yīng)用之一。響應(yīng)于選擇了可以由第二應(yīng)用提供或與第二應(yīng)用相關(guān)聯(lián)的擴(kuò)展中的一個擴(kuò)展,擴(kuò)展框架在獨立的沙箱化環(huán)境中啟動所選擇的擴(kuò)展并促成第一應(yīng)用和所選擇擴(kuò)展之間的過程間通信(IPC)機(jī)制或框架,以允許第一應(yīng)用經(jīng)由IPC通信機(jī)制訪問所選擴(kuò)展的功能。

根據(jù)一個實施例,擴(kuò)展點充當(dāng)擴(kuò)展的軟件開發(fā)者的接口并提供擴(kuò)展操作的域。每個擴(kuò)展點都與預(yù)定義組的策略(例如,資源授權(quán)或限制)相關(guān)聯(lián)并指定在宿主應(yīng)用和擴(kuò)展之間可以交換什么消息。為特定擴(kuò)展點設(shè)計的所有擴(kuò)展都必須符合該特定擴(kuò)展點的預(yù)定義策略中闡述的規(guī)范。所有擴(kuò)展在操作環(huán)境中執(zhí)行時,都有權(quán)使用由關(guān)聯(lián)擴(kuò)展點定義的同一組操作環(huán)境參數(shù)或受其約束。在開發(fā)第二應(yīng)用的擴(kuò)展時,開發(fā)者可以利用與特定擴(kuò)展點相關(guān)聯(lián)的擴(kuò)展模板作為軟件開發(fā)套件(SDK)來產(chǎn)生第二應(yīng)用(這里稱為容器應(yīng)用)和關(guān)聯(lián)擴(kuò)展的可執(zhí)行圖像。可以在捆綁發(fā)布擴(kuò)展和容器應(yīng)用。該捆綁包括容器應(yīng)用及其描述容器應(yīng)用的元數(shù)據(jù),以及擴(kuò)展及其描述擴(kuò)展的元數(shù)據(jù)。不過,容器應(yīng)用和擴(kuò)展可以在獨立的沙箱化環(huán)境中啟動并獨立操作,可以基于其相應(yīng)的元數(shù)據(jù)和/或?qū)?yīng)的擴(kuò)展點進(jìn)行配置,盡管它們可以訪問或共享公共庫或框架。

根據(jù)本發(fā)明的另一方面,可以提供注冊擴(kuò)展的一些作為操作系統(tǒng)的一部分;其他可以由第三方提供并由操作系統(tǒng)的安裝者安裝。根據(jù)一個實施例,可以由同一擴(kuò)展提供商提供的同一擴(kuò)展的更新版本替代或超馳更早安裝或注冊的擴(kuò)展的更舊版本。安裝或注冊框架認(rèn)證擴(kuò)展提供商,以確保僅有被授權(quán)的擴(kuò)展提供商能夠替代或超馳當(dāng)前安裝的擴(kuò)展。在一個實施例中,僅有特定擴(kuò)展的授權(quán)所有者能夠替代其自己安裝的擴(kuò)展。

在安裝擴(kuò)展時,基于擴(kuò)展的類型(例如,由統(tǒng)一類型標(biāo)識符或UTI標(biāo)識)和擴(kuò)展提供商標(biāo)識符(ID),安裝者在擴(kuò)展注冊表中查找,以判斷是否有當(dāng)前已安裝的同一擴(kuò)展的更早版本。如果有已經(jīng)安裝的更早版本,安裝者利用從新擴(kuò)展獲得的新擴(kuò)展密鑰替代擴(kuò)展注冊表中的擴(kuò)展密鑰。擴(kuò)展密鑰代表特定版本的擴(kuò)展。接下來,在從宿主應(yīng)用接收到調(diào)用擴(kuò)展的請求時,將基于新的擴(kuò)展密鑰識別并啟動擴(kuò)展的新版本。

在一個實施例中,擴(kuò)展框架提供的擴(kuò)展點之一是被設(shè)計成共享社區(qū)中的內(nèi)容或與另一用戶共享內(nèi)容的共享擴(kuò)展點。利用共享擴(kuò)展點,應(yīng)用能夠調(diào)用共享擴(kuò)展,其擴(kuò)展共享應(yīng)用,例如和的功能,以在社交網(wǎng)站上或與另一程序共享內(nèi)容。如上所述,為了調(diào)用共享擴(kuò)展,共享擴(kuò)展必須要安裝于擴(kuò)展框架或向擴(kuò)展框架注冊。典型地,共享擴(kuò)展必須要向系統(tǒng)注冊,指明該擴(kuò)展能夠例如通過向與針對內(nèi)容共享服務(wù)預(yù)先同意的UTI關(guān)聯(lián)的UTI注冊,來提供內(nèi)容共享服務(wù)。

在諸如瀏覽器的宿主應(yīng)用嘗試調(diào)用內(nèi)容共享服務(wù)時,例如,響應(yīng)于從用戶接收的“共享”命令,宿主應(yīng)用通過提供與內(nèi)容共享服務(wù)相關(guān)聯(lián)的適當(dāng)UTI,與擴(kuò)展框架的共享擴(kuò)展點通信。作為響應(yīng),擴(kuò)展框架例如通過匹配內(nèi)容共享服務(wù)的UTI與已安裝擴(kuò)展的UTI,來搜索能夠提供所請求服務(wù)的任何已安裝或注冊的擴(kuò)展。將向用戶提供其UTI與共享UTI匹配的共享擴(kuò)展的列表,以選擇它們之一。

在一個實施例中,一旦由用戶或由系統(tǒng)自動選擇了共享擴(kuò)展,宿主應(yīng)用就向共享擴(kuò)展發(fā)送代表要共享內(nèi)容的分辨率降低的圖像(例如,縮略圖)的數(shù)據(jù)對象。共享擴(kuò)展創(chuàng)建共享表單,共享表單中顯示了內(nèi)容的分辨率降低的圖像。共享擴(kuò)展然后例如,利用遠(yuǎn)程視圖橋連接(例如,遠(yuǎn)程視圖控制器或遠(yuǎn)程視圖橋),向宿主應(yīng)用中注入共享表單的副本作為表單克隆。共享表單克隆由宿主應(yīng)用顯示。響應(yīng)于從宿主應(yīng)用下達(dá)命令(例如,發(fā)送命令),共享擴(kuò)展從宿主應(yīng)用請求與縮略圖相關(guān)聯(lián)的完整實際內(nèi)容。之后,在共享網(wǎng)站上然后發(fā)布其中嵌入了實際內(nèi)容的最終共享表單。

圖2A是示出了根據(jù)本發(fā)明一個實施例,用于管理應(yīng)用擴(kuò)展的系統(tǒng)架構(gòu)的框圖。參考圖2A,系統(tǒng)200代表任何種類的數(shù)據(jù)處理系統(tǒng),例如服務(wù)器、臺式機(jī)、膝上型計算機(jī)、平板計算機(jī)或移動電話等。系統(tǒng)200包括具有應(yīng)用啟動模塊202和資源管理器203的應(yīng)用管理器201,用于啟動和管理應(yīng)用,應(yīng)用例如是處理資源(未示出)在系統(tǒng)200內(nèi)執(zhí)行的應(yīng)用204和應(yīng)用擴(kuò)展205。處理資源可以提供一個或多個處理器或處理器內(nèi)核。物理處理器典型地是指集成電路,其可能包括任意數(shù)量的其他處理元件,例如內(nèi)核或硬件線程。內(nèi)核常常是指位于集成電路上,能夠維持獨立架構(gòu)狀態(tài)的邏輯,其中每個獨立維持的家規(guī)狀態(tài)都與至少一些專用執(zhí)行資源相關(guān)聯(lián)。處理器可以是通用處理器,例如中央處理單元(CPU)。

應(yīng)用管理器201可以是由系統(tǒng)200內(nèi)的處理資源運行并執(zhí)行的操作系統(tǒng)(OS)的一部分。操作系統(tǒng)是管理計算機(jī)硬件資源并為計算機(jī)程序提供公共服務(wù)的軟件集合。操作系統(tǒng)是計算機(jī)系統(tǒng)中系統(tǒng)軟件的必要部分。應(yīng)用程序通常需要操作系統(tǒng)來工作。在操作系統(tǒng)的很多功能中,調(diào)度是為線程、過程或數(shù)據(jù)流提供訪問系統(tǒng)資源(例如,處理器時間、通信帶寬)的權(quán)限的方法。通常這樣做以有效地進(jìn)行負(fù)載平衡并共享系統(tǒng)資源或?qū)崿F(xiàn)目標(biāo)服務(wù)質(zhì)量。除了應(yīng)用管理器201之外,操作系統(tǒng)還可以包括其他內(nèi)核部件,例如調(diào)度器、設(shè)備管理器、內(nèi)核等。為了不會不必要地使本發(fā)明的實施例模糊不清,這里未示出這些部件。注意,應(yīng)用啟動模塊202和/或資源管理器203可以作為應(yīng)用管理器201外部的獨立部件被執(zhí)行或與操作系統(tǒng)的另一部件集成。系統(tǒng)200的操作系統(tǒng)可以是任何種類的操作系統(tǒng),例如,來自的iOSTM、來自的AndroidTM、來自的WindowsTM、或其他操作系統(tǒng)(例如,UNIX、LINUX、實時或嵌入式操作系統(tǒng))。

根據(jù)一個實施例,每個應(yīng)用都可以在相應(yīng)的專用或隔離的操作環(huán)境,例如沙箱化環(huán)境內(nèi)執(zhí)行,并由應(yīng)用管理器201管理。例如,在作為第一過程地址空間的第一沙箱化環(huán)境206內(nèi)將應(yīng)用204作為第一過程啟動并執(zhí)行。在作為第二過程地址空間的第二沙箱化環(huán)境207內(nèi)將應(yīng)用擴(kuò)展205作為第二過程啟動并執(zhí)行。過程地址空間是指虛擬地址空間或作為操作系統(tǒng)使過程可以使用的虛擬地址的范圍集合的地址空間。虛擬地址的范圍通常開始于低地址,并可以擴(kuò)展到計算機(jī)的指令集架構(gòu)允許的最高地址。這樣提供了幾個好處,其中之一是,如果為每個過程賦予獨立的地址空間,整個過程隔離期間都具有安全性。

應(yīng)用204可以是作為第一應(yīng)用的瀏覽器應(yīng)用,例如來自Apple的SafariTM、來自的Internet ExplorerTM、或來自Google的Google ChromeTM。應(yīng)用擴(kuò)展205可以是第二應(yīng)用(未示出)的插件,例如來自Adobe的Adobe AcrobatTM或內(nèi)容共享應(yīng)用,例如FacebookTM或TweeterTM應(yīng)用。插件經(jīng)特定設(shè)計,供第一應(yīng)用訪問第二應(yīng)用的功能。插件和第二應(yīng)用可以由第三方開發(fā)并作為捆綁發(fā)布到市場。在第二應(yīng)用安裝于系統(tǒng)200中時,應(yīng)用安裝者(未示出)解析捆綁的元數(shù)據(jù),并發(fā)現(xiàn)應(yīng)用擴(kuò)展205是為應(yīng)用204設(shè)計的。例如,在作為獨立應(yīng)用的操作系統(tǒng)的注冊表中,應(yīng)用擴(kuò)展205然后與應(yīng)用204相關(guān)聯(lián)或映射到應(yīng)用204。結(jié)果,應(yīng)用擴(kuò)展205可以被安裝并可以被應(yīng)用204使用,以允許應(yīng)用204在運行時間,例如,響應(yīng)于從應(yīng)用204接收的對特定類型擴(kuò)展服務(wù)(例如,內(nèi)容共享服務(wù))的請求而調(diào)用應(yīng)用擴(kuò)展205。

根據(jù)一個實施例,應(yīng)用擴(kuò)展205和托管應(yīng)用擴(kuò)展205的應(yīng)用204在獨立的過程地址空間206-207中加載并執(zhí)行,并由操作系統(tǒng)像獨立過程那樣對待。在一個實施例中,在第一沙箱化環(huán)境中將應(yīng)用204作為第一沙箱化過程來啟動和執(zhí)行,在第二沙箱化環(huán)境中將應(yīng)用擴(kuò)展205作為第二沙箱化過程來啟動和執(zhí)行。分別基于第一安全概況209和第二安全概況210(作為針對系統(tǒng)200中安裝的一些或所有應(yīng)用的安全概況208的部分)配置第一沙箱化環(huán)境和第二沙箱化環(huán)境。應(yīng)用204和應(yīng)用擴(kuò)展205經(jīng)由過程間通信(IPC)框架(未示出)彼此通信。操作系統(tǒng)分別基于第一和第二安全概況209-210逐個或獨立地實施安全并管理應(yīng)用204和應(yīng)用擴(kuò)展205的資源。

沙箱化過程是指在將過程限制到一組預(yù)定義資源的受限操作環(huán)境(例如,沙箱)內(nèi)限制的過程。每個沙箱化過程都可以與一組專用系統(tǒng)資源相關(guān)聯(lián),例如,專用存儲器空間、專用存儲器區(qū)域或虛擬機(jī)等。對應(yīng)用進(jìn)行沙箱化的目的之一是隔離應(yīng)用,以免其訪問另一應(yīng)用或系統(tǒng)部件的其他不必要或不相關(guān)系統(tǒng)資源,使得應(yīng)用導(dǎo)致的任何損傷不會溢出到系統(tǒng)100的其他區(qū)域。

為了提供安全性,可以通過將其功能限制到操作子集并僅允許適當(dāng)操作,即,根據(jù)其期望功能的操作必需的操作,來“包含”應(yīng)用。為每個應(yīng)用實施有限集合策略的一種方法是包含或“沙箱化”該應(yīng)用??梢岳貌僮飨到y(tǒng)層級的保護(hù)來實現(xiàn)應(yīng)用或過程的沙箱化,以提供包含,并實施安全策略,例如限制應(yīng)用的能力,不允許其采取提供其期望功能所需的那些功能之外的動作。

在執(zhí)行期間對應(yīng)用進(jìn)行沙箱化時,該應(yīng)用在沙箱(也稱為應(yīng)用容器)內(nèi)包含的系統(tǒng)內(nèi)被作為沙箱化過程或線程執(zhí)行,在沙箱內(nèi),其不能訪問另一應(yīng)用的特定系統(tǒng)資源或另一領(lǐng)域(例如,沙箱),受到與沙箱化應(yīng)用相關(guān)聯(lián)的安全概況的限制,這被稱為沙箱化過程或沙箱化應(yīng)用。

沙箱化過程是將為其實施安全包含的應(yīng)用或其他程序。在很多情況下,沙箱化過程是用戶應(yīng)用,但其可以是實現(xiàn)于計算設(shè)備上的另一程序,例如守護(hù)進(jìn)程或服務(wù)。為了增加安全性并提供有效率的機(jī)制,在內(nèi)核空間中實施或執(zhí)行安全系統(tǒng)的部分。此外,監(jiān)視器過程模塊(未示出)在與沙箱化過程獨立的存儲器空間中執(zhí)行,以進(jìn)一步將它們彼此隔離。具體而言,限制沙箱化過程以免其訪問其過程空間外部的存儲器,并進(jìn)一步禁止其產(chǎn)生非沙箱化過程。例如,沙箱化過程的安全概況可以包括拒絕沙箱化過程使用特定系統(tǒng)調(diào)用的規(guī)則或策略,其可以是允許過程改變彼此的地址空間的機(jī)制。

在一些實施例中,策略可以基于連接到計算設(shè)備的外部附件的狀態(tài),例如,如果連接了特定類型或身份的附件;斷開連接或在特定模式中連接或處于(或不處于)特定模式中,阻止程序執(zhí)行特定動作。例如,如果符合特定標(biāo)準(zhǔn)的附件連接到數(shù)據(jù)總線并處于相應(yīng)模式中,可以僅允許應(yīng)用通過可從外部訪問的數(shù)據(jù)總線通信??梢栽?006年8月4日提交的美國專利申請No.11/462,680,現(xiàn)在為美國專利No.8,272,048中找到關(guān)于沙箱化技術(shù)的更多詳細(xì)信息,該專利已經(jīng)被轉(zhuǎn)讓給本申請的共同受讓人并通過引用全文并入本文。

重新參考圖2A,安全概況209指定應(yīng)用204在其在過程地址空間206內(nèi)操作期間可以利用的第一組受限資源。類似地,安全概況210指定應(yīng)用擴(kuò)展205在其在過程地址空間207內(nèi)操作期間可以利用的第二組受限資源。在本示例中,第二組資源可以比第一組資源更少(例如,更受限制)。例如,應(yīng)用204可能能夠訪問網(wǎng)絡(luò)和系統(tǒng)200的本地存儲器,而應(yīng)用擴(kuò)展205可能不能訪問同一網(wǎng)絡(luò),但其可以能夠訪問系統(tǒng)200的本地存儲器。

根據(jù)一個實施例,為要在數(shù)據(jù)處理系統(tǒng)中部署的每個程序或應(yīng)用定義一個或多個授權(quán)。授權(quán)代表在其執(zhí)行期間授權(quán)程序訪問的特定功能或資源。授權(quán)可以由開發(fā)者在開發(fā)程序期間指定,或者,授權(quán)可以由授權(quán)實體指定,授權(quán)實體例如是授權(quán)服務(wù)器或供應(yīng)服務(wù)器,供應(yīng)服務(wù)器供應(yīng)或分發(fā)程序??梢詫⑦@樣的授權(quán)指定為附屬于或嵌入程序內(nèi)的屬性或元數(shù)據(jù),并任選地由授權(quán)實體使用數(shù)字證書簽署。

然后可以使用授權(quán)產(chǎn)生一組規(guī)則,指定程序在程序執(zhí)行期間能夠或不能做或訪問的特定動作或資源。然后,例如在安裝程序期間,將該組規(guī)則動態(tài)編譯成用于該程序的安全概況。在執(zhí)行程序期間,使用安全概況實施該組規(guī)則以限制程序,以免其執(zhí)行未授權(quán)程序?qū)嵤┑娜魏蝿幼骰蛟L問任何資源。這實際上迫使或約束程序在受限操作環(huán)境(例如,沙箱或沙箱化環(huán)境)中操作。資源是指數(shù)據(jù)處理系統(tǒng)或電子設(shè)備中任何種類的資源,例如,存儲器、輸入/輸出(IO)、總線、外部存儲器、文件、網(wǎng)絡(luò)連接(例如,套接字、端口或網(wǎng)絡(luò)地址)、過程間通信信道(例如,UNIX域套接字、XPC、MACH端口)等。

限制程序在受限操作環(huán)境中執(zhí)行能夠減少程序干擾的改變或?qū)﹄娮釉O(shè)備的其他部件或資源導(dǎo)致?lián)p壞。例如,程序可以由第三方開發(fā)或從網(wǎng)絡(luò)下載。程序可以包括故障的部件或例程(例如,編程錯誤),它們可能會意外訪問正常情況下由操作系統(tǒng)、微處理器、總線或電子設(shè)備的其他部件排他使用的某些關(guān)鍵性存儲空間。這樣的動作可能導(dǎo)致電子設(shè)備崩潰?;蛘撸绦蚩赡苁潜婚_發(fā)來故意對操作環(huán)境和/或電子設(shè)備造成損害的惡意程序。例如,帶病毒的程序可能專門被開發(fā)來對電子設(shè)備進(jìn)行控制和/或竊取操作電子設(shè)備的用戶的機(jī)密信息。通過限制程序在受限操作環(huán)境中執(zhí)行,可以大大減少這樣的損害。

重新參考圖2A,在本示例中,通過在獨立的過程地址空間206-207中執(zhí)行應(yīng)用204和應(yīng)用擴(kuò)展205,可以獨立地實施和管理應(yīng)用204和應(yīng)用擴(kuò)展205的安全性。一個實體(例如,應(yīng)用擴(kuò)展205)的故障不會導(dǎo)致另一個實體(例如,應(yīng)用204)的很大損害。此外,可以高效率地管理與應(yīng)用204和應(yīng)用擴(kuò)展205相關(guān)聯(lián)的資源。例如,如果應(yīng)用204不再需要應(yīng)用擴(kuò)展205,可以逐個終止或卸載應(yīng)用擴(kuò)展205,可以將其資源釋放回資源池用于其他用途,而不會顯著影響應(yīng)用204的操作。

圖2B是示出了根據(jù)本發(fā)明另一個實施例,用于管理應(yīng)用擴(kuò)展的系統(tǒng)架構(gòu)的框圖。參考圖2B,系統(tǒng)250代表任何種類的數(shù)據(jù)處理系統(tǒng),例如服務(wù)器、臺式機(jī)、膝上型計算機(jī)、平板計算機(jī)或移動電話等。類似于圖2A的系統(tǒng)200,系統(tǒng)250包括具有應(yīng)用啟動模塊202和資源管理器203的應(yīng)用管理器201,用于啟動和管理應(yīng)用,應(yīng)用例如是處理資源在系統(tǒng)200內(nèi)執(zhí)行的應(yīng)用204和應(yīng)用擴(kuò)展205。

根據(jù)一個實施例,應(yīng)用204和應(yīng)用擴(kuò)展205經(jīng)由過程間通信(IPC)框架(未示出)彼此通信,該過程間通信框架可以由對應(yīng)的擴(kuò)展點225代理。擴(kuò)展點225可以是操作系統(tǒng)定義并被擴(kuò)展服務(wù)提供商同意的各個擴(kuò)展點之一。為了允許應(yīng)用204和擴(kuò)展205彼此通信,應(yīng)用204和擴(kuò)展205必須要遵守專門為擴(kuò)展點225設(shè)計的一組策略和/或通信協(xié)議(例如,API)。于是,必須要利用專用于擴(kuò)展點225的SDK或庫來編譯應(yīng)用204和擴(kuò)展205。

操作系統(tǒng)分別基于第一和第二安全概況209-210逐個或獨立地實施安全并管理應(yīng)用204和應(yīng)用擴(kuò)展205的資源。需注意,第二應(yīng)用215在執(zhí)行時可以在獨立的沙箱化環(huán)境217中啟動。在應(yīng)用204訪問由擴(kuò)展205提供的功能時,不需要啟動容器應(yīng)用215,因為它們是被作為獨立程序?qū)Υ模M管擴(kuò)展205和應(yīng)用215可以在執(zhí)行期間共享相同的庫或框架。

重新參考圖2B,在本示例中,通過在獨立的過程地址空間206-207中執(zhí)行應(yīng)用204和應(yīng)用擴(kuò)展205,可以獨立地實施和管理應(yīng)用204和應(yīng)用擴(kuò)展205的安全性。一個實體(例如,應(yīng)用擴(kuò)展205)的故障不會導(dǎo)致另一個實體(例如,應(yīng)用204)的很大損害。此外,可以高效率地管理與應(yīng)用204和應(yīng)用擴(kuò)展205相關(guān)聯(lián)的資源。例如,如果應(yīng)用204不再需要應(yīng)用擴(kuò)展205,可以逐個終止或卸載應(yīng)用擴(kuò)展205,可以將其資源釋放回資源池用于其他用途,而不會顯著影響應(yīng)用204的操作。

圖2C是示出了根據(jù)本發(fā)明一個實施例,用于執(zhí)行應(yīng)用和應(yīng)用擴(kuò)展的方法的流程圖。方法250可通過可包括軟件、硬件或其組合的處理邏輯來實施。例如,方法250可以由圖2A和/或圖2B所示的系統(tǒng)執(zhí)行。參考圖2C,在方框251,處理邏輯基于第一應(yīng)用的第一安全概況在第一沙箱化環(huán)境(例如,第一過程地址空間)中啟動第一應(yīng)用。在方框252,響應(yīng)于來自第一應(yīng)用對調(diào)用應(yīng)用擴(kuò)展(例如,插件)的請求,處理邏輯基于與應(yīng)用擴(kuò)展相關(guān)聯(lián)的第二安全概況在第二沙箱化環(huán)境(例如,第二過程地址空間)中啟動應(yīng)用擴(kuò)展。應(yīng)用擴(kuò)展可以是第二應(yīng)用的擴(kuò)展,其中該擴(kuò)展被專門設(shè)計以允許第一應(yīng)用訪問第二應(yīng)用的功能。在方框253,處理邏輯基于第一和第二安全概況給出的權(quán)限啟用應(yīng)用和應(yīng)用擴(kuò)展之間的通信。在方框254,處理邏輯逐個實施安全性,并經(jīng)由第一和第二沙箱化環(huán)境管理第一應(yīng)用和應(yīng)用擴(kuò)展的資源。

根據(jù)一個實施例,在應(yīng)用擴(kuò)展產(chǎn)生要向用戶顯示的內(nèi)容,例如圖形用戶界面(GUI)內(nèi)容時,該內(nèi)容經(jīng)由IPC框架被注入應(yīng)用中并呈現(xiàn)給用戶,無需應(yīng)用經(jīng)由應(yīng)用編程接口(API)直接訪問應(yīng)用擴(kuò)展,這樣需要運行于同一過程地址空間內(nèi)的應(yīng)用擴(kuò)展。具體而言,遠(yuǎn)程視圖控制器嵌入每個應(yīng)用和應(yīng)用擴(kuò)展中以將應(yīng)用擴(kuò)展給出的GUI內(nèi)容注入應(yīng)用中。運行于應(yīng)用和應(yīng)用擴(kuò)展內(nèi)或與之相關(guān)聯(lián)的遠(yuǎn)程視圖控制器被配置為在應(yīng)用和應(yīng)用擴(kuò)展之間對用戶與GUI內(nèi)容的交互進(jìn)行同步。

圖3A是示出根據(jù)本發(fā)明一個實施例的操作系統(tǒng)架構(gòu)示例的框圖。操作系統(tǒng)300可以被實現(xiàn)為圖2A和/或圖2B中所示的系統(tǒng)的部分。參考圖3A,操作系統(tǒng)300包括一組一個或多個擴(kuò)展點303-305等,以允許諸如客戶端301-302的各客戶端經(jīng)由擴(kuò)展點303-305進(jìn)行訪問。每個擴(kuò)展點303-305代表一組預(yù)定義的API或協(xié)議,以允許作為宿主應(yīng)用的一個客戶端獲得作為擴(kuò)展的另一客戶端提供的預(yù)定義服務(wù),該擴(kuò)展至少擴(kuò)展作為容器應(yīng)用的另一應(yīng)用的功能的至少一部分。每個擴(kuò)展點303-305都可以進(jìn)一步為與擴(kuò)展點相關(guān)聯(lián)的過程定義資源、調(diào)度和終止方案(例如,應(yīng)當(dāng)首先終止哪個過程等)。在一個實施例中,擴(kuò)展點303-305可以包括與操作系統(tǒng)300相關(guān)聯(lián)的各種常用或普及功能或服務(wù)。擴(kuò)展點定義了一組預(yù)定義應(yīng)用編程接口(API)或通信協(xié)議,其允許客戶端從另一客戶端訪問或向另一客戶端提供服務(wù)。由擴(kuò)展點提供的服務(wù)可以由操作系統(tǒng)的標(biāo)準(zhǔn)部件或第三方供應(yīng)商提供的第三方功能提供。

擴(kuò)展點303-305可以由擴(kuò)展管理器310管理,其中擴(kuò)展點303-305可以作為操作系統(tǒng)300的系統(tǒng)部件的部分,被統(tǒng)稱為擴(kuò)展接口、擴(kuò)展層或擴(kuò)展框架。在安裝擴(kuò)展302及其對應(yīng)的容器應(yīng)用(未示出)時,安裝模塊320對包含擴(kuò)展302及其容器應(yīng)用的應(yīng)用捆綁的元數(shù)據(jù)進(jìn)行解析?;诤蛿U(kuò)展302相關(guān)聯(lián)的元數(shù)據(jù),安裝模塊320發(fā)現(xiàn)擴(kuò)展302是針對擴(kuò)展點304專門設(shè)計和開發(fā)的。例如,擴(kuò)展302可以利用特定的擴(kuò)展模板開發(fā)并利用對應(yīng)于擴(kuò)展點304的特定組的庫而編譯。

安裝模塊320然后在操作系統(tǒng)300中安裝擴(kuò)展302,并在啟動數(shù)據(jù)庫208中存儲與擴(kuò)展302相關(guān)的任何信息。例如,可以編譯并在啟動數(shù)據(jù)庫208中存儲擴(kuò)展302的安全概況(例如,配置文件)。安全概況可以包括表示擴(kuò)展302能夠通過擴(kuò)展點304提供服務(wù)的信息。安全概況還可以包括資源授權(quán)和/或限制,接下來可以利用其在啟動擴(kuò)展302時配置沙箱化環(huán)境。可以由安裝模塊320以類似方式安裝其他擴(kuò)展。此外,還可以在擴(kuò)展注冊表350中注冊擴(kuò)展302,接下來可以使用擴(kuò)展注冊表響應(yīng)于特定類型或種類的擴(kuò)展服務(wù),例如,基于被安裝擴(kuò)展的UTI,搜索擴(kuò)展服務(wù)。注意,可以將擴(kuò)展注冊表350和啟動數(shù)據(jù)庫208集成到具有查詢應(yīng)用編程接口(API)的單個儲存庫中。

接下來,在客戶端(在本示例中為應(yīng)用301)通過經(jīng)由擴(kuò)展304查詢擴(kuò)展點304可用的服務(wù)(也稱為擴(kuò)展服務(wù))時,擴(kuò)展管理器310調(diào)用啟動模塊202(或發(fā)現(xiàn)模塊,未示出)以發(fā)現(xiàn)能夠提供所查詢服務(wù)的系統(tǒng)中安裝的任何擴(kuò)展。作為響應(yīng),啟動模塊202在啟動數(shù)據(jù)庫208中搜索以識別并確定安裝的擴(kuò)展中哪個能夠提供這樣的服務(wù)。在一個實施例中,查詢可以包括指定服務(wù)需要的特定資源的信息。作為響應(yīng),啟動模塊202搜索并識別能夠應(yīng)對指定資源的那些人。例如,宿主應(yīng)用可以指定需要服務(wù)應(yīng)對的數(shù)據(jù)大小。于是,圖3A中所示的擴(kuò)展框架能夠匹配擴(kuò)展的能力和所請求服務(wù)的規(guī)范。或者,擴(kuò)展管理器310可以查詢擴(kuò)展注冊表350以識別能夠提供所請求擴(kuò)展服務(wù)的擴(kuò)展列表(例如,基于UTI),其中啟動數(shù)據(jù)庫208包含用于在啟動擴(kuò)展時配置沙箱化操作環(huán)境的信息(例如,沙箱配置或概況)。擴(kuò)展注冊表350的示例在圖6A中示出并在下文中進(jìn)一步詳細(xì)描述。

如果僅安裝了一個能夠為擴(kuò)展點304提供服務(wù)的擴(kuò)展,啟動模塊202可以自動啟動所識別的擴(kuò)展。如果有多個能夠為擴(kuò)展點304提供服務(wù)的擴(kuò)展,啟動模塊可以給出擴(kuò)展列表,允許用戶或客戶端301選擇它們之一啟動。如果所安裝的同一擴(kuò)展有多個版本,可以向用戶呈現(xiàn)至少一些版本,或者,可以呈現(xiàn)最晚的版本??梢杂蓴U(kuò)展注冊表350中提供的認(rèn)證擴(kuò)展替代或超馳擴(kuò)展的更早版本,從而識別并利用擴(kuò)展的最晚版本。一旦啟動了選擇的擴(kuò)展(在本示例中為擴(kuò)展302),擴(kuò)展管理器310就調(diào)用IPC服務(wù)模塊315,以方便客戶端301和客戶端302之間經(jīng)由擴(kuò)展點304的IPC通信。在一個實施例中,客戶端301和客戶端302之間的通信是基于異步消息的通信,例如可從Apple Inc.獲得的XPC框架。

在一個實施例中,擴(kuò)展點303-305可以包括,但不限于用于操作系統(tǒng)300的通知中心的擴(kuò)展點、用于第三方鍵盤的擴(kuò)展點、用于社交媒體的擴(kuò)展點、用于用戶接口(UI)的服務(wù)的擴(kuò)展點、用于文件提供商/獲取者的擴(kuò)展點、用于照片編輯和/或過濾的擴(kuò)展點、用于翻譯的擴(kuò)展點以及用于文件/內(nèi)容尋找程序的擴(kuò)展點。這些擴(kuò)展點中的一些被稱為動作擴(kuò)展點。這樣的動作擴(kuò)展被設(shè)計成擴(kuò)展宿主應(yīng)用內(nèi)另一應(yīng)用的查看和/或編輯功能。用戶能夠從宿主應(yīng)用發(fā)起服務(wù)。該服務(wù)將使用用戶提供的內(nèi)容(例如,經(jīng)由工具條項目、語境菜單等選擇的文本、滾輪上的圖像)。動作擴(kuò)展的示例包括,但不限于翻譯選定內(nèi)容的服務(wù)、查看文檔中圖像屬性的服務(wù)或?qū)D像應(yīng)用過濾器的服務(wù)等。過濾擴(kuò)展可以被設(shè)計成指定謂詞或簡單指令,讓系統(tǒng)構(gòu)建謂詞,該謂詞被參照共享數(shù)據(jù)進(jìn)行匹配,以便列出相關(guān)擴(kuò)展。

在一個實施例中,擴(kuò)展點303-305的每個都包括至少兩組API,一組供宿主應(yīng)用調(diào)用擴(kuò)展服務(wù),另一組供擴(kuò)展提供擴(kuò)展服務(wù),如圖3B中所示。參考圖3B,由于客戶端301和客戶端302在獨立的沙箱化環(huán)境中執(zhí)行,所以它們通常不能直接彼此通信。相反,客戶端301在本示例中作為宿主應(yīng)用,利用與擴(kuò)展點380相關(guān)聯(lián)的第一組API或協(xié)議通信,以方位系統(tǒng)資源,例如擴(kuò)展管理器310、啟動模塊202和IPC服務(wù)模塊315等。類似地,客戶端302在本示例中作為擴(kuò)展,利用與擴(kuò)展點380相關(guān)聯(lián)的第二組API或協(xié)議通信,以訪問擴(kuò)展管理器310、啟動模塊202和IPC服務(wù)模塊315。為了訪問擴(kuò)展點380,可以在軟件開發(fā)期間利用與擴(kuò)展點380相關(guān)聯(lián)的SDK編譯和鏈接客戶端301和客戶端302。

圖4A是示出了根據(jù)本發(fā)明一個實施例的應(yīng)用和應(yīng)用擴(kuò)展之間通信配置的框圖;參考圖4A,系統(tǒng)400可以被實現(xiàn)為上述擴(kuò)展系統(tǒng)的任一種的部分。參考圖4A,如上所述,應(yīng)用204是在沙箱化環(huán)境206內(nèi)執(zhí)行的,而應(yīng)用擴(kuò)展205是在沙箱化環(huán)境207內(nèi)執(zhí)行的,其中沙箱化環(huán)境206-207對應(yīng)于不同的過程地址空間。由于應(yīng)用204和應(yīng)用擴(kuò)展205是在不同地址空間中執(zhí)行的,所以不允許它們直接訪問與其他對應(yīng)方相關(guān)聯(lián)的資源(例如,存儲器地址);否則,可能導(dǎo)致頁面錯誤。

根據(jù)一個實施例,應(yīng)用204和應(yīng)用擴(kuò)展205經(jīng)由IPC框架401彼此通信。IPC框架401定義了一組通信接口或協(xié)議,以允許客戶端(在本示例中為應(yīng)用204和應(yīng)用擴(kuò)展205)與IPC框架401異步地通信,其中IPC框架401用以方便帶客戶端之間交換數(shù)據(jù)或消息。IPC框架401可以是任何種類的IPC框架,例如來自Apple Inc.的XPC或MACH、UNIX套接字框架等。IPC框架401可以被實現(xiàn)為各方之間的一組IPC服務(wù)。在應(yīng)用204和應(yīng)用擴(kuò)展205希望彼此通信時,它們通過例如連接到預(yù)先同意的IPC服務(wù)(例如,IPC服務(wù)名)建立通往IPC服務(wù)的連接并經(jīng)由該連接開始發(fā)送和接收數(shù)據(jù)或消息。例如,為了開發(fā)專門用于應(yīng)用204的應(yīng)用擴(kuò)展205,開發(fā)者可能必須開發(fā)專門連接到與開發(fā)應(yīng)用204的開發(fā)者達(dá)成一致的特定IPC服務(wù)名的代碼,使得應(yīng)用204和應(yīng)用擴(kuò)展205都能夠連接到同一IP服務(wù)。

IPC框架401涉及的服務(wù)壽命可以受到操作系統(tǒng)的管理。宿主應(yīng)用不必手工開始或停止IPC服務(wù);相反,它可以簡單地連接到服務(wù),如果服務(wù)未在運行,操作系統(tǒng)可以自動啟動服務(wù)并且在不需要時終止它。利用IPC框架401,應(yīng)用可以將自身分成多個服務(wù),每個服務(wù)都應(yīng)對安全敏感部件。這些服務(wù)可以利用非常有限的許可運行,并將在受到影響時不能導(dǎo)致很大損害。IPC框架401還可以通過更安全的方式允許應(yīng)用訪問操作系統(tǒng)提供的特定系統(tǒng)服務(wù),并允許第三方應(yīng)用彼此共享數(shù)據(jù)而不會影響操作系統(tǒng)的安全模型。

在一個實施例中,在應(yīng)用擴(kuò)展205呈現(xiàn)要由應(yīng)用204呈現(xiàn)的GUI內(nèi)容405時,運行于應(yīng)用擴(kuò)展205內(nèi)的內(nèi)容控制器403被配置為通過與對應(yīng)的內(nèi)容控制器402通信來向要呈現(xiàn)內(nèi)容404的應(yīng)用204中注入GUI內(nèi)容。內(nèi)容控制器402-403可以進(jìn)一步彼此通信以使內(nèi)容改變和/或用戶與所顯示內(nèi)容的交互同步。內(nèi)容控制器可以是遠(yuǎn)程視圖控制器,其允許過程或應(yīng)用與另一過程或應(yīng)用共享用戶接口。內(nèi)容控制器403向內(nèi)容控制器402拷貝內(nèi)容405,而不需要與應(yīng)用204運行于同一地址空間內(nèi)的應(yīng)用擴(kuò)展205。遠(yuǎn)程視圖服務(wù)可以被實現(xiàn)為上述IPC服務(wù)。

圖4B是示出了根據(jù)本發(fā)明另一實施例,用于應(yīng)對應(yīng)用擴(kuò)展的方法的流程圖。方法450可通過可包括軟件、硬件或其組合的處理邏輯來實施。例如,方法450可以由圖4A的系統(tǒng)400執(zhí)行。參考圖4B,在方框451,處理基于與第一應(yīng)用相關(guān)聯(lián)的第一安全概況在第一沙箱化環(huán)境中啟動第一應(yīng)用。在方框452,處理邏輯基于與應(yīng)用擴(kuò)展相關(guān)聯(lián)的第二安全概況在第二沙箱化環(huán)境中啟動應(yīng)用擴(kuò)展(例如,插件)。在一個實施例中,該應(yīng)用擴(kuò)展是第二應(yīng)用的擴(kuò)展,專門設(shè)計成讓第一應(yīng)用訪問第二應(yīng)用的功能。在方框453,響應(yīng)于在應(yīng)用擴(kuò)展內(nèi)呈現(xiàn)的第一內(nèi)容,處理邏輯經(jīng)由IPC框架401向第一應(yīng)用中注入第一內(nèi)容,以被呈現(xiàn)為第二內(nèi)容。在方框454,處理邏輯經(jīng)由IPC框架在第一應(yīng)用和應(yīng)用擴(kuò)展之間同步第一和第二內(nèi)容的更新。

根據(jù)一個實施例,擴(kuò)展點充當(dāng)擴(kuò)展的軟件開發(fā)者的接口并提供擴(kuò)展操作的域。每個擴(kuò)展點都與預(yù)定義組的策略(例如,資源授權(quán)或限制)相關(guān)聯(lián)并指定在宿主應(yīng)用和擴(kuò)展之間可以交換什么消息。為特定擴(kuò)展點設(shè)計的所有擴(kuò)展都必須符合該特定擴(kuò)展點的預(yù)定義策略中闡述的規(guī)范。所有擴(kuò)展在操作環(huán)境中執(zhí)行時,都有權(quán)使用由關(guān)聯(lián)擴(kuò)展點定義的同一組操作環(huán)境參數(shù)或受其約束。

在開發(fā)第二應(yīng)用的擴(kuò)展時,如圖5A中所示,開發(fā)者可以利用與特定擴(kuò)展點相關(guān)聯(lián)的擴(kuò)展模板501作為軟件開發(fā)套件(SDK)的部分,以基于源代碼502產(chǎn)生容器應(yīng)用531和關(guān)聯(lián)擴(kuò)展532的可執(zhí)行圖像,以及其相應(yīng)的元數(shù)據(jù)533-534??梢詫U(kuò)展和容器應(yīng)用作為捆綁220發(fā)布。該捆綁包括容器應(yīng)用531及其描述容器應(yīng)用的元數(shù)據(jù)533,以及擴(kuò)展532及其描述擴(kuò)展的元數(shù)據(jù)534。不過,容器應(yīng)用531和擴(kuò)展532可以各自在獨立的沙箱化環(huán)境中啟動并獨立操作,可以基于其相應(yīng)的元數(shù)據(jù)和/或?qū)?yīng)的擴(kuò)展點進(jìn)行配置,盡管它們可以訪問或共享公共庫或框架。在一些實施例中,容器應(yīng)用可以包括多個擴(kuò)展,在本示例中,為擴(kuò)展541和542。擴(kuò)展的每個擴(kuò)展可以進(jìn)一步指定擴(kuò)展提供商ID(例如,擴(kuò)展提供商ID 551)及其版本(例如,擴(kuò)展標(biāo)識符552,也稱為擴(kuò)展密鑰)。擴(kuò)展提供商ID是唯一地標(biāo)識擴(kuò)展提供商并由預(yù)先確定的管理機(jī)構(gòu)(例如,操作系統(tǒng)提供商)證明的標(biāo)識符。在安裝擴(kuò)展的更新版本時,在對應(yīng)擴(kuò)展提供商已經(jīng)成功認(rèn)證之后,利用新的擴(kuò)展密鑰(例如,版本552)替代擴(kuò)展注冊表(例如,圖3A的擴(kuò)展注冊表350)中的對應(yīng)擴(kuò)展密鑰,使得調(diào)用更新版本的擴(kuò)展而不是更舊的版本。

應(yīng)用捆綁可以是允許將相關(guān)資源,例如軟件代碼分到一組的目錄。應(yīng)用捆綁可以由“.app”擴(kuò)展(例如,“application.app”)標(biāo)識。應(yīng)用捆綁可以包括若干目錄和/或子目錄,例如“Contents”、“Operating system”,其可以包含由“.exe”擴(kuò)展標(biāo)識的應(yīng)用的可執(zhí)行代碼(例如,“Application.exe”,不過,在其他實施例中,可執(zhí)行文件可以具有另一擴(kuò)展或可以不包括擴(kuò)展),可以包含應(yīng)用資源的“Resources”(例如,“Image.png”)和可以包含應(yīng)用定義的服務(wù)的“XPC服務(wù)”。這些服務(wù)可以是一組計算機(jī)實施的指令,其被設(shè)計成實施特定功能或執(zhí)行指定任務(wù)。在一個實施例中,應(yīng)用定義的服務(wù)是僅有應(yīng)用捆綁代表的應(yīng)用可用的服務(wù)。此外,這些應(yīng)用定義的服務(wù)可以關(guān)聯(lián)到應(yīng)用的壽命,因為一旦應(yīng)用被終止,服務(wù)就不再可用了。

在一個實施例中,應(yīng)用捆綁中的可執(zhí)行代碼可以參照一個或多個框架而鏈接。框架可以包括軟件庫,軟件庫具有在明確定義的應(yīng)用編程接口(API)中封裝的軟件代碼的可重復(fù)使用的摘要??蚣茉试S軟件開發(fā)者為特定開發(fā)環(huán)境(例如,運行于計算設(shè)備上的操作系統(tǒng))實施應(yīng)用的標(biāo)準(zhǔn)結(jié)構(gòu)。由應(yīng)用鏈接的框架可以由框架捆綁代表。常用框架的一些示例可以包括內(nèi)核音頻框架和代碼圖形框架。應(yīng)用中的可執(zhí)行文件可以通過在應(yīng)用捆綁中的指定位置存儲框架名稱或框架捆綁的其他標(biāo)識符和/或通過調(diào)用關(guān)聯(lián)框架提供的API來鏈接框架。

框架捆綁中包括的服務(wù)可以被全部鏈接同一框架的若干不同應(yīng)用所用。在一個實施例中,可以有框架中特定服務(wù)的單個全局實例,其可用于特定數(shù)量的不同應(yīng)用。在另一個實施例中,可以有針對系統(tǒng)每個用戶而實例化的特定服務(wù)的個體實例,或針對運行于系統(tǒng)中的每個應(yīng)用的服務(wù)實例。在其他實施例中,每個服務(wù)可以具有不同的指定作為全局實例、每個用戶的實例或每個應(yīng)用的實例,其中在相同或不同框架中在同一時間可以有每種類型的服務(wù)。此外,在框架的判斷處可以生成某種其他實例。例如,一個框架可以具有針對每個瀏覽器標(biāo)簽或打開的窗口的一個實例。每個實例都可以由通用唯一標(biāo)識符(UUID)標(biāo)識。

在構(gòu)建應(yīng)用時,應(yīng)用設(shè)計者可以指定在應(yīng)用中具體定義什么服務(wù),以及該應(yīng)用將鏈接什么框架。應(yīng)用設(shè)計者還可以了解那些框架中包含什么服務(wù)。于是,在應(yīng)用定義的服務(wù)和鏈接框架中的服務(wù)之間,應(yīng)用設(shè)計者能夠授權(quán)訪問應(yīng)用可執(zhí)行文件需要或可能想訪問的所有服務(wù)。此外,該應(yīng)用設(shè)計者能夠指定允許應(yīng)用可執(zhí)行文件訪問哪些服務(wù)。因此,應(yīng)用不能使用不必要的且未授權(quán)的服務(wù)。這種元數(shù)據(jù)形式的信息可以最終被編譯為與應(yīng)用相關(guān)聯(lián)的安全概況的授權(quán)的部分。

重新參考圖5A,對于和操作系統(tǒng)相關(guān)聯(lián)的擴(kuò)展點的至少一個,可以定義擴(kuò)展模板(例如,模板501)以允許軟件開發(fā)者具有簡單且用戶有好的用戶界面,以針對該特定擴(kuò)展點構(gòu)造源代碼(例如,源代碼502)。例如,擴(kuò)展模板可以與(無論從宿主應(yīng)用的角度來說或是從擴(kuò)展的角度來說)訪問關(guān)聯(lián)擴(kuò)展點通常需要的一組預(yù)定義特定對象或類別相關(guān)聯(lián)。擴(kuò)展模板可以進(jìn)一步標(biāo)識特定與擴(kuò)展點相關(guān)聯(lián)的一組庫或框架。于是,在SDK 510的諸如編譯器和/或鏈接器的SDK工具編譯源代碼502時,利用了相關(guān)的庫或框架,例如庫520。結(jié)果,針對同一擴(kuò)展點編譯的所有擴(kuò)展將與同一組API或協(xié)議兼容并在執(zhí)行期間被授權(quán)使用同一資源授權(quán)或被限制到操作環(huán)境的相同限制。

圖5B是示出了根據(jù)本發(fā)明一個實施例,用于為擴(kuò)展點發(fā)展擴(kuò)展的方法的流程圖。方法550可通過可包括軟件、硬件或其組合的處理邏輯來實施。例如,方法550可以由圖5A的SDK 510執(zhí)行。參考圖5B,在方框551,定義一組擴(kuò)展點。每個擴(kuò)展點都與一組API相關(guān)聯(lián),以允許一個應(yīng)用訪問預(yù)定義功能或獲得服務(wù),可以經(jīng)由擴(kuò)展從另一個應(yīng)用(例如,容器應(yīng)用)擴(kuò)展該功能或服務(wù)。在方框552,對容器應(yīng)用進(jìn)行編譯,包括產(chǎn)生為容器應(yīng)用定義資源授權(quán)的第一配置文件。在方框553,編譯將容器應(yīng)用的功能經(jīng)由特定擴(kuò)展點擴(kuò)展到另一應(yīng)用的擴(kuò)展,包括產(chǎn)生具有與該擴(kuò)展點相關(guān)聯(lián)的元數(shù)據(jù)的第二配置文件。在方框554,將容器應(yīng)用和擴(kuò)展,以及其相應(yīng)的配置文件封裝成捆綁以進(jìn)行安裝。容器應(yīng)用和擴(kuò)展可以獨立地在不同沙箱中啟動。

圖6A是示出了根據(jù)本發(fā)明一個實施例,用于注冊擴(kuò)展的系統(tǒng)的框圖。系統(tǒng)600可以被實現(xiàn)為上述操作系統(tǒng)的部分。參考圖6A,擴(kuò)展框架,例如圖3A中所示的擴(kuò)展框架,維護(hù)著擴(kuò)展注冊表350,擴(kuò)展注冊表350中描述了已經(jīng)安裝并在操作系統(tǒng)中注冊的擴(kuò)展列表。在一個實施例中,擴(kuò)展注冊表350包括多個條目,每條對應(yīng)于安裝或注冊的擴(kuò)展中的一個擴(kuò)展。每個擴(kuò)展條目包括,但不限于擴(kuò)展ID 610、擴(kuò)展提供商ID 602和擴(kuò)展密鑰603。擴(kuò)展ID 610可以唯一地標(biāo)識定義且在操作系統(tǒng)提供商和擴(kuò)展提供商之間達(dá)成一致的擴(kuò)展服務(wù)的類型或類別,例如UTI。擴(kuò)展提供商ID 611可以唯一地標(biāo)識提供擴(kuò)展服務(wù)的擴(kuò)展提供商,其可以被預(yù)先確定的管理機(jī)構(gòu)授權(quán)或證明。擴(kuò)展密鑰612可以代表當(dāng)前安裝并向系統(tǒng)注冊的擴(kuò)展的特定版本或?qū)嵗?/p>

在一個實施例中,在開發(fā)擴(kuò)展時,可以為擴(kuò)展的二進(jìn)制代碼或可執(zhí)行圖像編寫對應(yīng)的擴(kuò)展提供商ID和與擴(kuò)展的該特定版本相關(guān)聯(lián)的擴(kuò)展密鑰。在本示例中,參考圖6A,擴(kuò)展的更早版本621包括其中編寫的擴(kuò)展提供商ID 623和擴(kuò)展密鑰625,而擴(kuò)展的更新版本622分別包括擴(kuò)展提供商ID 624和擴(kuò)展密鑰626。如果由不同供應(yīng)商提供,擴(kuò)展提供商ID 623-624可以不同;否則,擴(kuò)展提供商ID 623-624可以相同,不過,它們的擴(kuò)展密鑰625-626可以根據(jù)對應(yīng)的版本或?qū)嵗煌?/p>

出于例示的目的,假設(shè)擴(kuò)展621-622由同一擴(kuò)展提供商提供,而擴(kuò)展621是更早版本,擴(kuò)展622是更新版本。在擴(kuò)展621由安裝模塊320安裝時,生成對應(yīng)的條目650,其中字段610存儲與擴(kuò)展621提供的擴(kuò)展服務(wù)類型(在本示例中為內(nèi)容共享服務(wù))相關(guān)聯(lián)的擴(kuò)展種類ID(例如,UTI)。條目650的字段611存儲提供商ID 623,并且條目650的字段612存儲擴(kuò)展密鑰625。在宿主應(yīng)用601嘗試經(jīng)由對應(yīng)擴(kuò)展點602調(diào)用與條目650相關(guān)聯(lián)的擴(kuò)展時,擴(kuò)展管理器310可以在注冊表350中查找以基于例如宿主應(yīng)用601提供的擴(kuò)展ID識別能夠提供該類型或種類擴(kuò)展服務(wù)的任何擴(kuò)展。在本示例中,通過參照注冊表350的擴(kuò)展ID 610匹配宿主應(yīng)用601提供的擴(kuò)展ID來識別擴(kuò)展條目650?;谔峁┥蘄D 611和擴(kuò)展密鑰612,擴(kuò)展621將被識別并啟動。

隨后,在安裝更新版本的擴(kuò)展622時,根據(jù)一個實施例,安裝模塊320檢查擴(kuò)展622的元數(shù)據(jù)(在本示例中為擴(kuò)展提供商ID 623)以確保擴(kuò)展622由被適當(dāng)管理機(jī)構(gòu)證明或授權(quán)的真實擴(kuò)展提供商提供。一旦認(rèn)證了擴(kuò)展622的擴(kuò)展提供商,安裝模塊320就利用更新的擴(kuò)展密鑰626替代條目650的擴(kuò)展密鑰612(例如,擴(kuò)展密鑰625)。結(jié)果,響應(yīng)于后續(xù)請求,為了調(diào)用與條目650相關(guān)聯(lián)的擴(kuò)展,在本示例中將識別更新版本的擴(kuò)展622而不是更舊版本的擴(kuò)展621。

圖6B是示出了根據(jù)本發(fā)明一個實施例,用于管理經(jīng)由擴(kuò)展點的擴(kuò)展的方法的流程圖。方法650可通過可包括軟件、硬件或其組合的處理邏輯來實施。例如,方法650可以由圖6A的系統(tǒng)600執(zhí)行。參考圖6B,在方框651,處理邏輯從第一應(yīng)用接收查詢與一個或多個其他應(yīng)用擴(kuò)展的特定擴(kuò)展點相關(guān)聯(lián)的特定擴(kuò)展服務(wù)(例如,由特定UTI標(biāo)識)的請求。響應(yīng)于該請求,在方框652,處理邏輯識別已安裝且能夠經(jīng)由特定擴(kuò)展點提供所請求服務(wù)的一個或多個擴(kuò)展的列表,包括識別擴(kuò)展的至少多個版本。在方框653,向用戶或第一應(yīng)用呈現(xiàn)所識別擴(kuò)展的列表以選擇擴(kuò)展中的一個擴(kuò)展。在方框654,響應(yīng)于選擇了擴(kuò)展第二應(yīng)用的功能的擴(kuò)展,處理邏輯在獨立的沙箱化環(huán)境中啟動擴(kuò)展。注意,可以獨立地執(zhí)行擴(kuò)展而無需啟動第二應(yīng)用。在方框655,經(jīng)由對應(yīng)的沙箱化環(huán)境在擴(kuò)展上實施與擴(kuò)展點相關(guān)聯(lián)的資源限制。

如上所述,擴(kuò)展的示例包括,但不限于用于操作系統(tǒng)300的通知中心的擴(kuò)展點、用于第三方鍵盤的擴(kuò)展點、用于社交媒體的擴(kuò)展點、用于用戶接口(UI)的服務(wù)的擴(kuò)展點、用于文件提供商/獲取者的擴(kuò)展點、用于照片編輯和/或過濾的擴(kuò)展點、用于翻譯的擴(kuò)展點以及用于文件/內(nèi)容尋找程序的擴(kuò)展點。這些擴(kuò)展中的一些,例如翻譯擴(kuò)展點或過濾擴(kuò)展點,被稱為動作擴(kuò)展點。過濾擴(kuò)展點可以用于調(diào)用過濾擴(kuò)展,其執(zhí)行數(shù)據(jù)過濾操作,例如照片過濾操作。根據(jù)一個實施例,動作擴(kuò)展可以包括可執(zhí)行代碼條,例如JavaScript或其他腳本,可以從擴(kuò)展調(diào)用并下載它們并在宿主應(yīng)用中執(zhí)行,以輔助宿主應(yīng)用的特定任務(wù)。

圖7A是示出了根據(jù)本發(fā)明一個實施例的動作擴(kuò)展點的示例的框圖。參考圖7A,在本示例中,動作擴(kuò)展702是內(nèi)容處理擴(kuò)展,被設(shè)計成經(jīng)由動作擴(kuò)展點710為諸如宿主應(yīng)用701的客戶端處理內(nèi)容或數(shù)據(jù)。動作擴(kuò)展702可以由不同于提供操作系統(tǒng)的開發(fā)者的第三方開發(fā)者開發(fā)。在一個實施例中,動作擴(kuò)展702除了內(nèi)容處理功能或模塊705之外,包括數(shù)據(jù)轉(zhuǎn)換代碼704A。數(shù)據(jù)轉(zhuǎn)換代碼704A作為輔助代理,可以實現(xiàn)為可執(zhí)行腳本的形式,例如JavaScriptTM。

在一個實施例中,在宿主應(yīng)用701請求動作擴(kuò)展服務(wù)時,出于例示的目的,該動作擴(kuò)展服務(wù)為翻譯擴(kuò)展服務(wù),動作擴(kuò)展點710(例如,翻譯擴(kuò)展點)識別并啟動擴(kuò)展702,以提供翻譯服務(wù)。此外,宿主應(yīng)用701可以調(diào)用數(shù)據(jù)轉(zhuǎn)換代碼704A以在內(nèi)容處理模塊705執(zhí)行實際翻譯之前執(zhí)行特定的數(shù)據(jù)轉(zhuǎn)換。在一個實施例中,宿主應(yīng)用701(在本示例中為瀏覽器應(yīng)用)下載數(shù)據(jù)轉(zhuǎn)換代碼并在宿主應(yīng)用701中將其作為數(shù)據(jù)轉(zhuǎn)換代碼704B來執(zhí)行。

數(shù)據(jù)轉(zhuǎn)換代碼704B在被執(zhí)行時,被配置為解析內(nèi)容703以識別內(nèi)容703的哪個部分需要由內(nèi)容處理模塊705處理。數(shù)據(jù)轉(zhuǎn)換代碼704B要將所識別的內(nèi)容封裝成與擴(kuò)展點710兼容的格式,并向擴(kuò)展802發(fā)送封裝的數(shù)據(jù),以由內(nèi)容處理模塊705(在本示例中為翻譯模塊)處理,以翻譯內(nèi)容。響應(yīng)于內(nèi)容處理的結(jié)果,即經(jīng)過翻譯的內(nèi)容,數(shù)據(jù)轉(zhuǎn)換代碼704B要對翻譯的內(nèi)容進(jìn)行重新格式化以與內(nèi)容703兼容并將翻譯的內(nèi)容與內(nèi)容703合并。

本實施例可以應(yīng)用于這樣的狀況:宿主應(yīng)用701為瀏覽器應(yīng)用,將特定內(nèi)容703顯示為超文本標(biāo)記語言(HTML)頁。瀏覽器應(yīng)用可以下載JavaScript,即數(shù)據(jù)轉(zhuǎn)換代碼704A并將其作為代碼704B來執(zhí)行。JavaScript然后可以處理HTML內(nèi)容703以對HTML頁進(jìn)行解析和理解,以便識別要翻譯的感興趣數(shù)據(jù)。結(jié)果,內(nèi)容處理模塊不必理解HTML頁的結(jié)構(gòu)。數(shù)據(jù)轉(zhuǎn)換代碼作為擴(kuò)展702的輔助代理而工作(類似于另一個擴(kuò)展的擴(kuò)展)。注意,數(shù)據(jù)轉(zhuǎn)換代碼704B仍然必須要經(jīng)由擴(kuò)展點710與擴(kuò)展702通信。數(shù)據(jù)轉(zhuǎn)換代碼704A捆綁于擴(kuò)展702內(nèi),但是由宿主應(yīng)用701將其作為代碼704B而下載和執(zhí)行的。

圖7B是示出了根據(jù)本發(fā)明一個實施例,由動作擴(kuò)展點執(zhí)行的方法的流程圖。方法750可通過可包括軟件、硬件或其組合的處理邏輯來實施。例如,方法750可以由圖7A所示的系統(tǒng)執(zhí)行。參考圖7B,在方框751,響應(yīng)于來自宿主應(yīng)用的調(diào)用內(nèi)容處理服務(wù)(例如,翻譯)的請求,處理邏輯識別并加載內(nèi)容處理擴(kuò)展。宿主應(yīng)用可以是顯示網(wǎng)頁的瀏覽器應(yīng)用,擴(kuò)展可以是提供翻譯服務(wù)的翻譯擴(kuò)展。在方框752,處理邏輯從擴(kuò)展下載數(shù)據(jù)轉(zhuǎn)換代碼并在宿主應(yīng)用內(nèi)加載數(shù)據(jù)轉(zhuǎn)換代碼。數(shù)據(jù)轉(zhuǎn)換代碼可以是可執(zhí)行腳本,例如JavaScript。在方框753,宿主執(zhí)行數(shù)據(jù)轉(zhuǎn)換代碼,以對宿主應(yīng)用呈現(xiàn)的內(nèi)容的一部分進(jìn)行解析和識別。在方框754,數(shù)據(jù)轉(zhuǎn)換代碼將內(nèi)容的所識別部分轉(zhuǎn)換成與對應(yīng)擴(kuò)展點(例如,翻譯擴(kuò)展點)兼容的形式并經(jīng)由擴(kuò)展點向擴(kuò)展發(fā)送轉(zhuǎn)換的數(shù)據(jù)。響應(yīng)于從擴(kuò)展接收的已處理內(nèi)容(例如,翻譯的內(nèi)容),數(shù)據(jù)轉(zhuǎn)換代碼要將數(shù)據(jù)轉(zhuǎn)換回到與宿主應(yīng)用兼容的形式,并將處理的內(nèi)容與宿主應(yīng)用的現(xiàn)有內(nèi)容合并。

圖8A是示出了根據(jù)本發(fā)明一個實施例,用于提供內(nèi)容共享服務(wù)的共享擴(kuò)展點的框圖。系統(tǒng)800可以被實現(xiàn)為上述擴(kuò)展框架的任一種的部分。參考圖8A,在本示例中,宿主應(yīng)用801顯示或呈現(xiàn)內(nèi)容811,該內(nèi)容可以由內(nèi)容源802,諸如網(wǎng)站提供。在觀看內(nèi)容811之后,用戶可能希望通過激活共享用戶界面812與其朋友共享內(nèi)容811。激活共享用戶界面812會經(jīng)由路徑821向共享擴(kuò)展803通過共享擴(kuò)展點805發(fā)送共享命令。通過路徑821發(fā)送的共享命令還可以包括具有內(nèi)容811的降低分辨率的圖像(例如,縮略圖)的數(shù)據(jù)對象。在本示例中,假設(shè)共享擴(kuò)展803已經(jīng)利用上述技術(shù)中的一些被正確安裝,注冊,識別并選擇。宿主應(yīng)用801和共享擴(kuò)展803可以如上所述經(jīng)由共享擴(kuò)展點805提供的IPC框架來彼此通信。

響應(yīng)于經(jīng)由路徑821接收的共享命令,根據(jù)一個實施例,共享擴(kuò)展803創(chuàng)建共享表單813,該共享表單中呈現(xiàn)了從所接收數(shù)據(jù)對象提取的內(nèi)容811的縮略圖。共享表單813然后經(jīng)由路徑822被注入到宿主應(yīng)用801中,并被顯示為具有代表內(nèi)容811的縮略圖816的共享表單克隆815。共享表單克隆可以經(jīng)由共享擴(kuò)展803和宿主應(yīng)用801之間的遠(yuǎn)程查看橋連接而被注入。一旦用戶查看了共享表單克隆815并共享由縮略圖816呈現(xiàn)的內(nèi)容,就經(jīng)由路徑823向共享擴(kuò)展803發(fā)送行使命令。響應(yīng)于行使命令,共享擴(kuò)展803經(jīng)由路徑824發(fā)送對實際內(nèi)容811的請求。一旦共享擴(kuò)展803經(jīng)由路徑825從宿主應(yīng)用801接收到實際內(nèi)容,它就利用實際內(nèi)容替代縮略圖814,并經(jīng)由路徑826在內(nèi)容共享網(wǎng)站或平臺804處發(fā)布共享表單813。注意,共享擴(kuò)展點可以用于將共享服務(wù)擴(kuò)展到社交社區(qū)(例如TwitterTM、FacebookTM、LinkedInTM等)和/或非社交環(huán)境(例如AirDropTM、電子郵件等)。

圖8B是示出了根據(jù)本發(fā)明一個實施例,使用共享擴(kuò)展共享內(nèi)容的方法的流程圖。方法850可通過可包括軟件、硬件或其組合的處理邏輯來實施。例如,方法850可以由圖8A的系統(tǒng)800執(zhí)行。參考圖8B,在方框851,響應(yīng)于來自宿主應(yīng)用對共享內(nèi)容的請求,處理邏輯識別并啟動能夠提供內(nèi)容共享服務(wù)的共享擴(kuò)展。在方框852,共享擴(kuò)展創(chuàng)建具有要共享的內(nèi)容的分辨率降低的圖像(例如,縮略圖、圖標(biāo))的共享表單。例如,利用遠(yuǎn)程查看橋連接將共享表單作為共享表單視圖注入到宿主應(yīng)用中。在方框853,響應(yīng)于來自宿主應(yīng)用的行使命令,共享擴(kuò)展從宿主應(yīng)用請求并接收實際內(nèi)容,在方框854,在內(nèi)容共享網(wǎng)站上發(fā)布具有實際內(nèi)容的共享表單。

圖9是示出了根據(jù)本發(fā)明一個實施例,用于應(yīng)對應(yīng)用終止的過程的框圖。系統(tǒng)900可以被實現(xiàn)為上述任何系統(tǒng)的部分。參考圖9,在應(yīng)用管理器201經(jīng)由路徑911從升級管理器接收到升級應(yīng)用204的請求或者終止應(yīng)用204的請求時,應(yīng)用管理器201經(jīng)由路徑912與應(yīng)用204通信,以查詢終止應(yīng)用204是否安全。響應(yīng)于該查詢,應(yīng)用204經(jīng)由路徑913與中央管理機(jī)構(gòu)902,例如窗口服務(wù)器通信,以判斷應(yīng)用擴(kuò)展205當(dāng)前是否正在被用戶使用。中央管理機(jī)構(gòu)902可以經(jīng)由路徑914判斷應(yīng)用擴(kuò)展205是否在前景中,這是一種發(fā)現(xiàn)用戶當(dāng)前是否在使用應(yīng)用擴(kuò)展205提供的用戶界面的方式。中央管理機(jī)構(gòu)902然后經(jīng)由路徑915向應(yīng)用204發(fā)回應(yīng)用擴(kuò)展的操作狀態(tài),應(yīng)用204接著經(jīng)由路徑916通知應(yīng)用管理器201。例如,如果判定用戶當(dāng)前在利用用戶界面應(yīng)用擴(kuò)展205,應(yīng)用管理器201可以推遲終止應(yīng)用204,以便不會打斷用戶?;蛘撸瑧?yīng)用204可以經(jīng)由IPC框架直接與應(yīng)用擴(kuò)展205通信,以判斷用戶當(dāng)前是否在使用應(yīng)用擴(kuò)展205。

根據(jù)另一個實施例,特定應(yīng)用的應(yīng)用擴(kuò)展可以由集中應(yīng)用或控制中心用于經(jīng)由應(yīng)用擴(kuò)展訪問關(guān)聯(lián)應(yīng)用的功能。亦即,集中應(yīng)用或控制中心充當(dāng)各個應(yīng)用的集中進(jìn)入點,而無需用戶逐個啟動對應(yīng)的應(yīng)用。此外,在操作系統(tǒng)已經(jīng)安裝應(yīng)用擴(kuò)展時,向用戶提供選項以激活/啟用或去活/禁用應(yīng)用擴(kuò)展。例如,可以在應(yīng)用控制中心的用戶界面內(nèi)將針對操作系統(tǒng)的應(yīng)用控制中心(例如,通知中心)的已安裝應(yīng)用的已安裝應(yīng)用擴(kuò)展顯示為宿主應(yīng)用。應(yīng)用控制中心的用戶界面可以顯示啟用/禁用選項(例如,諸如圖標(biāo)的開關(guān)圖形表達(dá))以允許用戶啟用或禁用已安裝的應(yīng)用擴(kuò)展。僅在啟用應(yīng)用擴(kuò)展的時候才可以從應(yīng)用控制中心訪問應(yīng)用擴(kuò)展(例如,以利用關(guān)聯(lián)的已安裝應(yīng)用的功能);否則,用戶必須要使用與應(yīng)用擴(kuò)展相關(guān)聯(lián)的已安裝應(yīng)用。

圖10是示出了根據(jù)本發(fā)明一個實施例,用于經(jīng)由其相應(yīng)擴(kuò)展訪問應(yīng)用的系統(tǒng)的框圖。參考圖10,宿主應(yīng)用1001被配置為托管專門為宿主應(yīng)用1001設(shè)計的應(yīng)用1006-1007的應(yīng)用擴(kuò)展1004-1005的列表1009,它們分別由標(biāo)簽或圖形表達(dá)(例如,圖標(biāo))1010-1011代表。宿主應(yīng)用1001可以是操作系統(tǒng)的通知中心或控制中心。應(yīng)用擴(kuò)展1004-1005可以在與執(zhí)行宿主應(yīng)用1001的沙箱化環(huán)境不同的沙箱化環(huán)境1002-1003中啟動和執(zhí)行。注意,應(yīng)用擴(kuò)展1004-1005也可以在與執(zhí)行其關(guān)聯(lián)應(yīng)用1006-1007的沙箱化環(huán)境不同的沙箱化環(huán)境中執(zhí)行。從作為集中進(jìn)入點的擴(kuò)展列表1009開始,用戶能夠經(jīng)由其相應(yīng)擴(kuò)展1004-1005訪問應(yīng)用1006-1007的功能。在一個實施例中,宿主應(yīng)用1001包括配置界面1008,以允許用戶逐個啟用或禁用(例如,進(jìn)入或退出)應(yīng)用擴(kuò)展1010-1011的任一個。

圖11A-11B是示出了根據(jù)本發(fā)明一個實施例的應(yīng)用的圖形用戶界面示例的屏幕截圖。參考圖11A和11B,可以由圖10的系統(tǒng)1000代表屏幕截圖。GUI 1100代表宿主應(yīng)用,例如,圖10的宿主應(yīng)用1001的用戶界面。在本示例中,應(yīng)用1100代表操作系統(tǒng)的應(yīng)用控制中心,例如來自Apple Inc.的iOS的通知中心。應(yīng)用1100包括多個通往各種其他應(yīng)用的標(biāo)簽或進(jìn)入點。在本示例中,GUI包括列出其他應(yīng)用的激活進(jìn)入點的區(qū)段和列出其他應(yīng)用的去活進(jìn)入點的區(qū)段1102??梢酝ㄟ^切換對應(yīng)的開關(guān)圖標(biāo)來去活區(qū)段1101中列出的每個標(biāo)簽或進(jìn)入點,這將會把進(jìn)入點的圖形表達(dá)從區(qū)段1101移動到區(qū)段1102。類似地,可以將區(qū)段1102中的每個進(jìn)入點激活并移動到區(qū)段1101。

在一個實施例中,區(qū)段1101-1102中的至少一些進(jìn)入點可以是從第三方應(yīng)用擴(kuò)展的應(yīng)用擴(kuò)展,一些可以與操作系統(tǒng)提供的應(yīng)用或服務(wù)相關(guān)聯(lián)。例如,應(yīng)用1103可以是第三方應(yīng)用(例如,圖10的應(yīng)用1007),而應(yīng)用1104可以是操作系統(tǒng)提供的內(nèi)置應(yīng)用或服務(wù)(例如,圖10的應(yīng)用1006)。從圖11A所示的應(yīng)用1101的GUI,用戶能夠經(jīng)由其激活的進(jìn)入點訪問另一個應(yīng)用。例如,用戶可以點擊圖11A中代表另一應(yīng)用的插件的圖形表達(dá)1103,以訪問圖11B所示的該特定應(yīng)用的功能。結(jié)果,用戶能夠從本示例中的通知中心訪問多個應(yīng)用。用戶還能夠通過方便的方式啟動各個應(yīng)用,從而逐個訪問那些應(yīng)用。

圖12A-12C是示出了根據(jù)本發(fā)明一個實施例的應(yīng)用的圖形用戶界面示例的屏幕截圖。參考圖12A-12C,可以由圖10的系統(tǒng)1000代表屏幕截圖。在本示例中,GUI 1200可以由宿主應(yīng)用1201代表,以使共享表單出現(xiàn)在行1202中列出的其他應(yīng)用和列1203中列出的服務(wù)中。行1202中列出的圖形表達(dá)(在本示例中為圖標(biāo))可以包括來自其他應(yīng)用,例如TwitterTM和FacebookTM的一些應(yīng)用擴(kuò)展。行1202和1203中的那些擴(kuò)展或服務(wù)的每個都可以被逐個激活或去活。例如,在用戶在行1202和行1203中的“More”圖標(biāo)上點擊時,顯示配置頁以允許用戶逐個配置所列出應(yīng)用擴(kuò)展或服務(wù)的任一個,分別如圖12B和圖12C中所示。

圖13是可用于本發(fā)明一個實施例的數(shù)據(jù)處理系統(tǒng)示例的框圖。例如,系統(tǒng)1300可以代表上文描述為執(zhí)行上述任何過程或方法的任意數(shù)據(jù)處理系統(tǒng)。例如,系統(tǒng)1300可以代表上述系統(tǒng)。系統(tǒng)1300可以代表臺式機(jī)(例如,可從加利福尼亞Cupertino的Apple Inc.買到的iMacTM)、膝上型計算機(jī)(例如,MacBookTM)、平板計算機(jī)(例如,iPadTM)、服務(wù)器、移動電話(例如,iPhoneTM)、媒體播放器(例如,iPodTM或iPod TouchTM)、個人數(shù)字助理(PDA)、個人通信器、游戲設(shè)備、網(wǎng)絡(luò)路由器或集線器、無線接入點(AP)或轉(zhuǎn)發(fā)器、機(jī)頂盒或其組合。

參考圖13,在一個實施例中,系統(tǒng)1300包括處理器1301和外圍設(shè)備接口1302,這里也稱為芯片組,以經(jīng)由總線或互連將各種部件耦接到處理器1301,各種部件包括存儲器1303和設(shè)備1305-1308。處理器1301可以代表單個處理器或多個處理器,其中包括單個處理器內(nèi)核或多個處理器內(nèi)核。處理器1301可以代表一個或多個通用處理器,例如微處理器、中央處理單元(CPU)等。更具體地講,處理器1301可以是復(fù)雜指令集計算(CISC)微處理器、精簡指令集計算(RISC)微處理器、超長指令字(VLIW)微處理器、或執(zhí)行其他指令集的處理器、或執(zhí)行指令集組合的處理器。處理器1301也可以是一個或多個專用處理器,例如專用集成電路(ASIC)、現(xiàn)場可編程門陣列(FPGA)、數(shù)字信號處理器(DSP)、網(wǎng)絡(luò)處理器、圖形處理器、網(wǎng)絡(luò)處理器、通信處理器、密碼處理器、協(xié)處理器、嵌入式處理器或任何其他類型的能夠處理指令的邏輯。處理器1301被配置為執(zhí)行指令,以執(zhí)行本文論述的操作和步驟。

外圍設(shè)備接口1302可以包括存儲器控制集線器(MCH)和輸入輸出控制集線器(ICH)。外圍設(shè)備接口1302可以包括與存儲器1303通信的存儲器控制器(未示出)。外圍設(shè)備接口1302還可以包括與圖形子系統(tǒng)1304通信的圖形接口,其可以包括顯示器控制器和/或顯示設(shè)備。外圍設(shè)備接口1302可以經(jīng)由加速圖形端口(AGP)、外圍部件互連(PCI)高速總線或其他類型的互連與圖形設(shè)備1304通信。

MCH有時被稱為北橋,ICH有時被稱為南橋。如本文所用,術(shù)語MCH、ICH、北橋和南橋意在被寬泛地解釋為覆蓋功能包括向處理器傳遞中斷信號的各種芯片。在一些實施例中,MCH可以與處理器1301集成。在這樣的配置中,外圍設(shè)備接口1302作為接口芯片工作,執(zhí)行MCH和ICH的一些功能。此外,圖形加速器可以集成于MCH或處理器1301內(nèi)。

存儲器1303可以包括一個或多個易失性外部存儲器(或存儲器)設(shè)備,例如隨機(jī)存取存儲器(RAM)、動態(tài)RAM(DRAM)、同步DRAM(SDRAM)、靜態(tài)RAM(SRAM)或其他類型的存儲設(shè)備。存儲器1303可以存儲包括由處理器1301或任何其他設(shè)備執(zhí)行的指令序列的信息。例如,可以在存儲器1303中加載各種操作系統(tǒng)、設(shè)備驅(qū)動程序、固件(例如,輸入輸出基本系統(tǒng)或BIOS)和/或應(yīng)用的可執(zhí)行代碼和/或數(shù)據(jù)并由處理器1301執(zhí)行。操作系統(tǒng)可以是任何種類的操作系統(tǒng),例如,來自的操作系統(tǒng)、來自Apple的Mac來自的或其他實時或嵌入式操作系統(tǒng),例如VxWorks。

外圍設(shè)備接口1302可以提供通往諸如設(shè)備1305-1308的IO設(shè)備的接口,所述設(shè)備包括無線收發(fā)器1305、輸入設(shè)備1306、音頻IO設(shè)備1307和其他IO設(shè)備1308。無線收發(fā)器1305可以是WiFi收發(fā)器、紅外收發(fā)器、藍(lán)牙收發(fā)器、WiMax收發(fā)器、無線蜂窩電話收發(fā)器、衛(wèi)星收發(fā)器(例如,全球定位系統(tǒng)(GPS)收發(fā)器)或其組合。輸入設(shè)備1306可以包括鼠標(biāo)、觸控板、觸感屏(其可以與顯示設(shè)備1304集成)、諸如觸筆的定點設(shè)備和/或鍵盤(例如,物理鍵盤或顯示為觸敏屏一部分的虛擬鍵盤)。例如,輸入設(shè)備1306可以包括耦接到觸摸屏的觸摸屏控制器。觸摸屏和觸摸屏控制器例如能夠利用多種觸敏技術(shù)的任何一種檢測接觸和運動或其中斷,觸敏技術(shù)包括但不限于電容性、電阻性、紅外和表面聲波技術(shù),以及用于確定與接觸屏接觸的一個或多個點的其他接近傳感器陣列或其他元件。

音頻IO 1307可以包括揚聲器和/或麥克風(fēng),以方便啟用語音的功能,例如語音識別、語音復(fù)制、數(shù)字記錄和/或電話功能。其他任選設(shè)備1308可以包括存儲設(shè)備(例如,硬盤驅(qū)動器、閃存存儲器設(shè)備)、通用串行總線(USB)端口、并行端口、串行端口、打印機(jī)、網(wǎng)絡(luò)接口、總線橋(例如,PCI-PCI橋)、傳感器(例如,運動傳感器、光傳感器、接近傳感器等)或其組合。任選設(shè)備1308還可以包括成像處理子系統(tǒng)(例如,相機(jī)),其可以包括用于促成相機(jī)功能,例如記錄照片和視頻剪輯的光學(xué)傳感器,例如電荷耦合器件(CCD)或互補金屬氧化物半導(dǎo)體(CMOS)光學(xué)傳感器。

需注意,雖然圖13示出了數(shù)據(jù)處理系統(tǒng)的各種部件,但是其并不旨在表示使這些部件互連的任何特定構(gòu)造或方式,因此此類細(xì)節(jié)與本發(fā)明的實施例并無密切關(guān)系。也可以理解,具有較少部件或可能較多部件的網(wǎng)絡(luò)計算機(jī)、手持計算機(jī)、移動電話以及其他數(shù)據(jù)處理系統(tǒng)也可用于本發(fā)明的實施例。

已按照對計算機(jī)存儲器中的數(shù)據(jù)位進(jìn)行操作的算法和符號表示來呈現(xiàn)前面詳細(xì)描述的某些部分。這些算法描述和表示是數(shù)據(jù)處理領(lǐng)域技術(shù)人員所用的方法,而這些方法也能最有效的將他們的工作實質(zhì)傳達(dá)給該領(lǐng)域其他技術(shù)人員。算法在這里并通常是指導(dǎo)致所希望的結(jié)果的操作的自相一致的序列。操作是需要對物理量進(jìn)行物理操縱的那些操作。

然而,應(yīng)當(dāng)謹(jǐn)記,所有這些以及類似的術(shù)語都與適當(dāng)?shù)奈锢砹肯嚓P(guān)聯(lián),并且只是應(yīng)用于這些量的方便標(biāo)簽。除非另外特別說明,否則從上述討論中顯而易見的是,可以理解在整個說明書中,使用例如那些在以下權(quán)利要求中示出的術(shù)語的討論是指計算機(jī)系統(tǒng)或類似的電子計算設(shè)備的操作和流程,該設(shè)備可操作在計算機(jī)系統(tǒng)寄存器和存儲器中表示為物理(電子)量的數(shù)據(jù)、或?qū)⑵滢D(zhuǎn)換成在計算機(jī)存儲器、寄存器或其他此類信息存儲、傳輸或顯示設(shè)備中同樣顯示為物理量的其他數(shù)據(jù)。

可以利用一個或多個電子設(shè)備上存儲和執(zhí)行的代碼和數(shù)據(jù)實施圖中所示的技術(shù)。此類電子設(shè)備利用計算機(jī)可讀介質(zhì)存儲并(在內(nèi)部和/或通過網(wǎng)絡(luò)與其他電子設(shè)備)傳輸代碼和數(shù)據(jù),計算機(jī)可讀介質(zhì)例如是非暫態(tài)計算機(jī)可讀存儲介質(zhì)(例如,磁盤、光盤、隨機(jī)存取存儲器、只讀存儲器、閃速存儲設(shè)備、相變存儲器)和暫態(tài)計算機(jī)可讀傳輸介質(zhì)(例如,電、光、聲或其他形式的傳播信號,例如載波、紅外信號、數(shù)字信號)。

前面圖中所示的流程或方法可通過處理包括硬件(例如電路、專用邏輯等)、固件、軟件(如實現(xiàn)在非暫態(tài)計算機(jī)可讀介質(zhì)上)或它們兩者的組合的邏輯來執(zhí)行。雖然上文利用某些順序操作來描述流程或方法,但是應(yīng)當(dāng)理解,所描述的某些操作可以不同的順序來執(zhí)行。此外,某些操作也可并行執(zhí)行而并非按順序執(zhí)行。

在前述的說明書中,參照其特定的示例性實施例描述了本發(fā)明的各實施例。顯而易見的是,可在不脫離以下權(quán)利要求所示的本發(fā)明的更廣泛的實質(zhì)和范圍的情況下對實施例做出各種修改。因此,說明書和附圖應(yīng)被認(rèn)為是出于例證目的而非限制目的。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1